Open In App
Related Articles

Python – Find Words with both alphabets and numbers

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Report issue
Report

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

# Python3 code to demonstrate working of
# Words with both alphabets and numbers
# Using isdigit() + isalpha() + any()
 
# initializing string
test_str = 'geeksfor23geeks is best45 for gee34ks and cs'
 
# printing original string
print("The original string is : " + test_str)
 
# Words with both alphabets and numbers
# Using isdigit() + isalpha() + any()
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)
         
# printing result
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

# Python3 code to demonstrate working of
# Words with both alphabets and numbers
# Using regex
import re
 
# initializing string
test_str = 'geeksfor23geeks is best45 for gee34ks and cs'
 
# printing original string
print("The original string is : " + test_str)
 
# Words with both alphabets and numbers
# Using regex
res = re.findall(r'(?:\d+[a-zA-Z]+|[a-zA-Z]+\d+)', test_str)
         
# printing result
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

# Python3 code to demonstrate working of
# Words with both alphabets and numbers
import operator as op
# define all digits
all_digits = ['0', '1', '2', '3', '4',
              '5', '6', '7', '8', '9']
 
# define all letters
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']
 
# initializing string
test_str = 'geeksfor23geeks is best45 for gee34ks and cs'
 
# printing original string
print("The original string is : " + test_str)
 
# Words with both alphabets and numbers
# Using isdigit() + isalpha() + any()
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)
 
# printing result
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
 
# initialize the string
test_str = 'geeksfor23geeks is best45 for gee34ks and cs'
 
# split the string into words
words = np.array(test_str.split())
 
# create a boolean array indicating if a word contains letters and numbers
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])
 
# extract words that contain both letters and numbers
result = words[has_letters_and_numbers]
 
print("Words with alphabets and numbers:", result)
#This code is contributed by Edula Vinay Kumar Reddy

                    

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

# Python3 code to demonstrate working of
# Words with both alphabets and numbers
 
# initializing string
test_str = 'geeksfor23geeks is best45 for gee34ks and cs'
 
# printing original string
print("The original string is : " + test_str)
 
# Words with both alphabets and numbers
# Using a for loop and isalnum() method
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)
 
# printing result
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

# Python3 code to demonstrate working of
# Words with both alphabets and numbers
# Using filter() function and lambda function
 
# initializing string
test_str = 'geeksfor23geeks is best45 for gee34ks and cs'
 
# printing original string
print("The original string is : " + test_str)
 
# Words with both alphabets and numbers
# Using filter() function and lambda function
res = list(filter(lambda word: any(char.isdigit() for char in word) and any(char.isalpha() for char in word), test_str.split()))
 
# printing result
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
Previous
Next
Share your thoughts in the comments
Similar Reads