Python – Find Words with both alphabets and numbers
Sometimes, while working with Python strings, we can have problem in which we need to extract certain words with contain both numbers and alphabets. This kind of problem can occur in many domains like school programming and web-development. Lets discuss certain ways in which this task can be performed.
Method #1 : Using any() + isdigit() + isalpha() The combination of above functionalities can be used to perform this task. In this, we iterate for all the words and check for required combination using isdigit() and isalpha().
Python3
test_str = 'geeksfor23geeks is best45 for gee34ks and cs'
print ( "The original string is : " + test_str)
res = []
temp = test_str.split()
for idx in temp:
if any ( chr .isalpha() for chr in idx) and any ( chr .isdigit() for chr in idx):
res.append(idx)
print ( "Words with alphabets and numbers : " + str (res))
|
Output
The original string is : geeksfor23geeks is best45 for gee34ks and cs
Words with alphabets and numbers : ['geeksfor23geeks', 'best45', 'gee34ks']
Method #2 : Using regex This is yet another way by which we can perform this task. In this, we feed the string to findall(), and extract the required result. Returns strings till the numbers only.
Python3
import re
test_str = 'geeksfor23geeks is best45 for gee34ks and cs'
print ( "The original string is : " + test_str)
res = re.findall(r '(?:\d+[a-zA-Z]+|[a-zA-Z]+\d+)' , test_str)
print ( "Words with alphabets and numbers : " + str (res))
|
Output
The original string is : geeksfor23geeks is best45 for gee34ks and cs
Words with alphabets and numbers : ['geeksfor23', 'best45', 'gee34']
Time Complexity: O(n)
Space Complexity: O(n)
Method #3: Using operator.countOf() method.
Python3
import operator as op
all_digits = [ '0' , '1' , '2' , '3' , '4' ,
'5' , '6' , '7' , '8' , '9' ]
all_letters = [ 'a' , 'b' , 'c' , 'd' , 'e' , 'f' ,
'g' , 'h' , 'i' , 'j' , 'k' , 'l' ,
'm' , 'n' , 'o' , 'p' , 'q' , 'r' ,
's' , 't' , 'u' , 'v' , 'w' , 'x' , 'y' , 'z' ]
test_str = 'geeksfor23geeks is best45 for gee34ks and cs'
print ( "The original string is : " + test_str)
res = []
temp = test_str.split()
for idx in temp:
if any (op.countOf(all_letters, chr ) > 0 for chr in idx) and any (op.countOf(all_digits, chr ) > 0 for chr in idx):
res.append(idx)
print ( "Words with alphabets and numbers : " + str (res))
|
Output
The original string is : geeksfor23geeks is best45 for gee34ks and cs
Words with alphabets and numbers : ['geeksfor23geeks', 'best45', 'gee34ks']
Time Complexity: O(n)
Space Complexity: O(n)
Method #4: Using NumPy, you can perform this task by splitting the string into words, checking if both letters and numbers exist in each word, and then appending the words that contain both letters and numbers to a result list. Here’s an example:
Python3
import numpy as np
test_str = 'geeksfor23geeks is best45 for gee34ks and cs'
words = np.array(test_str.split())
has_letters_and_numbers = np.array([ any (c.isdigit() for c in word) and any (c.isalpha() for c in word) for word in words])
result = words[has_letters_and_numbers]
print ( "Words with alphabets and numbers:" , result)
|
Output:
Words with alphabets and numbers: ['geeksfor23geeks' 'best45' 'gee34ks']
Time Complexity: O(n)
Auxiliary Space: O(n)
Method #5: Using a for loop and isalnum() method
- Initialize an empty list ‘res’ to store the words with both alphabets and numbers.
- Split the string ‘test_str’ into a list of words and assign it to ‘temp’.
- Iterate through each word in ‘temp’ using a for loop.
- Check if the word has at least one alphabet and one digit using the isalnum() method.
- If the word satisfies the condition, append it to the ‘res’ list.
- Finally, print the ‘res’ list.
Python3
test_str = 'geeksfor23geeks is best45 for gee34ks and cs'
print ( "The original string is : " + test_str)
res = []
temp = test_str.split()
for word in temp:
if any (c.isalpha() for c in word) and any (c.isdigit() for c in word):
res.append(word)
print ( "Words with alphabets and numbers : " + str (res))
|
Output
The original string is : geeksfor23geeks is best45 for gee34ks and cs
Words with alphabets and numbers : ['geeksfor23geeks', 'best45', 'gee34ks']
Time Complexity: O(n*k), where n is the number of words in the input string and k is the maximum length of a word in the input string.
Auxiliary Space: O(m), where m is the number of words with both alphabets and numbers in the input string.
Method 6: Using filter() function and lambda function
- Use the filter() function to iterate over each word in the string.
- Create a lambda function that checks if the word contains both alphabets and numbers using the isalnum() method.
- Return the filtered list of words that have both alphabets and numbers.
- Calculate the time complexity and auxiliary space complexity of this method.
Python3
test_str = 'geeksfor23geeks is best45 for gee34ks and cs'
print ( "The original string is : " + test_str)
res = list ( filter ( lambda word: any (char.isdigit() for char in word) and any (char.isalpha() for char in word), test_str.split()))
print ( "Words with alphabets and numbers : " + str (res))
|
Output
The original string is : geeksfor23geeks is best45 for gee34ks and cs
Words with alphabets and numbers : ['geeksfor23geeks', 'best45', 'gee34ks']
Time complexity: O(n), where n is the number of words in the string, because we iterate over each word once.
Auxiliary space: O(k), where k is the number of words in the string that have both alphabets and numbers, because we create a list to store the filtered words.
Last Updated :
02 May, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...