Given list of tuples, extract tuples having elements in range.
Input : test_list = [(4, 5, 7), (5, 6), (3, 8, 10 ), (4, 10)], strt, end = 5, 6 Output : [(5, 6)] Explanation : Only 1 tuple lies in range of 5-6. Input : test_list = [(4, 5, 7), (5, 6), (3, 8, 10 ), (4, 10)], strt, end = 1, 10 Output : [(4, 5, 7), (5, 6), (3, 8, 10 ), (4, 10)] Explanation : All lie in specified range.
Method #1 : Using list comprehension + all()
In this, we check for all elements in range using comparison operator and all() returns true for tuples that contain tuples in range specified.
# Python3 code to demonstrate working of
# Extract tuples with elements in Range
# Using all() + list comprehension
# initializing list
test_list = [(4, 5, 7), (5, 6), (3, 8, 10 ), (4, 10)]
# printing original list
print("The original list is : " + str(test_list))
# initializing range
strt, end = 4, 7
# list comprehension to encapsulate in 1 liner
# all() checks for all elements in range
res = [sub for sub in test_list if all(ele >= strt and ele <= end for ele in sub)]
# printing results
print("Filtered tuples : " + str(res))
Output
The original list is : [(4, 5, 7), (5, 6), (3, 8, 10), (4, 10)] Filtered tuples : [(4, 5, 7), (5, 6)]
Time Complexity: O(n), where n is the length of the input list.
Auxiliary Space: O(n) additional space of size n is created where n is the number of elements in the list “test_list”.
Method #2 : Using filter() + lambda + all()
In this, we employ filter() to extract out tuples, according to function provided by lambda, and all() as utility to test for all elements in range tuple.
# Python3 code to demonstrate working of
# Extract tuples with elements in Range
# Using filter() + lambda + all()
# initializing list
test_list = [(4, 5, 7), (5, 6), (3, 8, 10 ), (4, 10)]
# printing original list
print("The original list is : " + str(test_list))
# initializing range
strt, end = 4, 7
# list() to get back result as list
# all() checks for all elements in range
res = list(filter(lambda sub : all(ele >= strt and ele <= end for ele in sub), test_list))
# printing results
print("Filtered tuples : " + str(res))
Output
The original list is : [(4, 5, 7), (5, 6), (3, 8, 10), (4, 10)] Filtered tuples : [(4, 5, 7), (5, 6)]
Method 3 : using a for loop
- Initialize a list of tuples test_list with some sample data.
- Define the range of values we want to extract from the tuples as strt and end.
- Create an empty list res to store the filtered tuples.
- Use a for loop to iterate through each tuple in test_list.
- Within the for loop, use the all() function to check if all elements in the current tuple are within the given range.
- If all elements are within the range, append the tuple to res.
- After the loop has finished iterating through all tuples, print the filtered tuples in res.
# initializing list
test_list = [(4, 5, 7), (5, 6), (3, 8, 10 ), (4, 10)]
# initializing range
strt, end = 4, 7
# initializing an empty list to store the filtered tuples
res = []
# iterating through each tuple in the list
for tup in test_list:
# checking if all elements of the tuple are within the range
if all(strt <= ele <= end for ele in tup):
# if yes, adding the tuple to the result list
res.append(tup)
# printing results
print("Filtered tuples : " + str(res))
Output
Filtered tuples : [(4, 5, 7), (5, 6)]
The time complexity of this approach is O(n*m), where n is the number of tuples in the list and m is the number of elements in each tuple.
The space complexity is O(k), where k is the number of tuples that satisfy the condition.