Question
- Find words contain both alphabets and numbers from an input string.
- Given
str1 = "Emma25 is Data scientist50 and AI Expert"
- Expected Output:
Emma25
scientist50
Hint
Use the built-in function any()
with the combination of string method isalpha()
and isdigit()
Syntax of any() function
any( iterable)
- Return
True
if any element of the iterable is true. - If the iterable is empty, return
False
.
My attempt
I can think use string.split() method first, and check each word in the with isalpha and isdigit method, but do not know how to combine them.
My Decomposition of the question
- The output need to be an string composed of number and alphabet
- The first step is to separate the str1 into different string
- use split() method, this will return a list
- check each string whether it is a mixture of digit and alphabet
- if a string is mixture of digit and alphabet, isalpha() and isdigit() will both return True
- if the part fulfil the requirement, output it
Recommend solution
str1 = "Emma25 is Data scientist50 and AI Expert"
new_list = []
# split string by whitespace
temp_list = str1.split()
# Check each string whether is a mixture of alphabet and digits
for string in temp_list:
# If a string in a mixture of alphabet and digits, when checking each character in that string,
# isdigit and isalpha will return True at least one time,
if any(char.isalpha() for char in string) and any(char.isdigit() for char in string):
# add the mixture string to a list
new_list.append(string)
print("Displaying words with alphabets and numbers")
# print out the result
for string in new_list:
print(string)
Algorithm of the solution
- initiate a new_list
- Separate the original list and store in the temp_list
- Check each string whether is a mixture of alphabet and digits
- 3.1 If the string is a mixture of alphabet and digits, isdigit() and isalpha() both will return True at least one time
- 3.1.1 check whether the string contain alpha
- Use list comprehension to iterate over each character on the string, and check with isalpha() and output will present as an iterator
- Call any() function on the iterator, a True should return
- Use list comprehension to iterate over each character on the string, and check with isalpha() and output will present as an iterator
- 3.1.2 Check whether a the string contain digit
- Use list comprehension to iterate over each character on the string, and check with isdigit() and output will present as an iterator
- Call any() function on the iterator, a True should return
- Use list comprehension to iterate over each character on the string, and check with isdigit() and output will present as an iterator
- 3.1.3 If both 3.1.1 and 3.1.2 are True, store the string to the new_list
- 3.1.1 check whether the string contain alpha
- 3.1 If the string is a mixture of alphabet and digits, isdigit() and isalpha() both will return True at least one time
- Print out the result
- 4.1 Iterate over the new_list and print out each string
My reflection
I though I am close to solve this question, maybe don't give up too soon next time. Glad I learn a new function any() and how to use it.
Credit
- Exercise on PYnative
- Python doc (Accessed at 2022 JUN 07)
Top comments (0)