Open In App

Python – Extract Tuples with all Numeric Strings

Last Updated : 15 Mar, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

Given a list of tuples, extract only those tuples which have all numeric strings.

Input : test_list = [(“45”, “86”), (“Gfg”, “1”), (“98”, “10”)] 
Output : [(’45’, ’86’), (’98’, ’10’)] 
Explanation : Only number representing tuples are filtered. 

Input : test_list = [(“Gfg”, “1”)] 
Output : [] 
Explanation : No tuple containing just numbers.

Method #1 : Using list comprehension + all() + isdigit()

In this, we check for string being numeric string using isdigit() and all() is used to check for all strings. List comprehension is used to iterate all tuples.

Python3




# Python3 code to demonstrate working of
# Extract Tuples with all Numeric Strings
# Using all() + list comprehension + isdigit()
 
# initializing list
test_list = [("45", "86"), ("Gfg", "1"), ("98", "10"), ("Gfg", "Best")]
 
# printing original list
print("The original list is : " + str(test_list))
 
# all() checks for all digits()
res = [sub for sub in test_list if all(ele.isdigit() for ele in sub)]
 
# printing result
print("Filtered Tuples : " + str(res))


Output

The original list is : [('45', '86'), ('Gfg', '1'), ('98', '10'), ('Gfg', 'Best')]
Filtered Tuples : [('45', '86'), ('98', '10')]

Method #2 : Using lambda + filter() + isdigit()

In this, we perform task of filtering using filter() + lambda, and isdigit() is used to check for numerics.

Python3




# Python3 code to demonstrate working of
# Extract Tuples with all Numeric Strings
# Using lambda + filter() + isdigit()
 
# initializing list
test_list = [("45", "86"), ("Gfg", "1"), ("98", "10"), ("Gfg", "Best")]
 
# printing original list
print("The original list is : " + str(test_list))
 
# all() checks for all digits()
res = list(filter(lambda sub: all(ele.isdigit() for ele in sub), test_list))
 
# printing result
print("Filtered Tuples : " + str(res))


Output

The original list is : [('45', '86'), ('Gfg', '1'), ('98', '10'), ('Gfg', 'Best')]
Filtered Tuples : [('45', '86'), ('98', '10')]

Method #3 : Using list comprehension + all() + isnumeric()

Python3




# Python3 code to demonstrate working of
# Extract Tuples with all Numeric Strings
# Using all() + list comprehension + isdigit()
 
# initializing list
test_list = [("45", "86"), ("Gfg", "1"), ("98", "10"), ("Gfg", "Best")]
 
# printing original list
print("The original list is : " + str(test_list))
 
res = [sub for sub in test_list if all(ele.isnumeric() for ele in sub)]
 
# printing result
print("Filtered Tuples : " + str(res))


Output

The original list is : [('45', '86'), ('Gfg', '1'), ('98', '10'), ('Gfg', 'Best')]
Filtered Tuples : [('45', '86'), ('98', '10')]

The Time and Space Complexity for all the methods are the same:

Time Complexity: O(n2)

Auxiliary Space: O(n2)

Method #4 : Using join(),replace() and len() methods

Python3




# Python3 code to demonstrate working of
# Extract Tuples with all Numeric Strings
 
# initializing list
test_list = [("45", "86"), ("Gfg", "1"), ("98", "10"), ("Gfg", "Best")]
 
# printing original list
print("The original list is : " + str(test_list))
digits = "0123456789"
res = []
for i in test_list:
    x = "".join(i)
    for j in digits:
        x = x.replace(j, "")
    if(len(x) == 0):
        res.append(i)
 
 
# printing result
print("Filtered Tuples : " + str(res))


Output

The original list is : [('45', '86'), ('Gfg', '1'), ('98', '10'), ('Gfg', 'Best')]
Filtered Tuples : [('45', '86'), ('98', '10')]

Method #5:Using loop and re

  1. Initialize the test_list with tuples.
  2. Print the original list.
  3. Initialize the result list.
  4. Loop through each tuple in the test_list.
  5. For each tuple in the test_list, check if all elements in the tuple are numeric.
  6. If all elements are numeric, append the tuple to the result list.
  7. Print the filtered tuples.

Python3




#Python3 code to demonstrate working of
#Extract Tuples with all Numeric Strings
#Using re module and loop
import re
 
#initializing list
test_list = [("45", "86"), ("Gfg", "1"), ("98", "10"), ("Gfg", "Best")]
 
#printing original list
print("The original list is : " + str(test_list))
 
#initialize result list
res = []
 
#iterate over the tuples in the test_list
for sub in test_list:
  # check if all elements in the tuple are numeric
  if all([re.match('^[0-9]+$', i) for i in sub]):
    res.append(sub)
 
#printing result
print("Filtered Tuples : " + str(res))
#This code is contributed by Vinay Pinjala.


Output

The original list is : [('45', '86'), ('Gfg', '1'), ('98', '10'), ('Gfg', 'Best')]
Filtered Tuples : [('45', '86'), ('98', '10')]

Time complexity: The time complexity of this code is O(n*m) where n is the length of the input list and m is the maximum length of the tuples in the input list. This is because we are iterating through the input list and for each tuple, we are iterating through all its elements to check if they are numeric using regular expressions.

Space complexity: The space complexity of this code is O(k), where k is the number of tuples that satisfy the condition of having all numeric strings. This is because we are creating a new list to store these tuples. The space required for the regular expression matches is negligible in comparison.



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads