Given a list of tuples. The task is to get all the tuples that have all positive elements.
Examples:
Input : test_list = [(4, 5, 9), (-3, 2, 3), (-3, 5, 6), (4, -6)] Output : [(4, 5, 9)] Explanation : Extracted tuples with all positive elements. Input : test_list = [(-4, 5, 9), (-3, 2, 3), (-3, 5, 6), (4, -6)] Output : [] Explanation : No tuple with all positive elements.
Method #1 : Using list comprehension + all()
In this, all() is used to check for all the tuples, list comprehension helps in the iteration of tuples.
Step-by-step approach:
- Initialize a list of tuples named test_list containing tuples of different lengths, with positive and negative integers.
- Print the original list using the print() function with the string concatenation operator + to combine the string message with the list.
- Use list comprehension to filter out the tuples containing only positive integers from the test_list. This is done using a conditional expression inside the comprehension that checks if all elements of the tuple are greater than or equal to zero.
- Print the resulting list of positive tuples using the print() function with the string concatenation operator + to combine the string message with the list.
- The program successfully filters out the tuples containing negative integers and returns only the tuples with positive integers.
Below is the implementation of the above approach:
# Python3 code to demonstrate working of
# Positive Tuples in List
# Using list comprehension + all()
# initializing list
test_list = [(4, 5, 9), (-3, 2, 3), (-3, 5, 6), (4, 6)]
# printing original list
print("The original list is : " + str(test_list))
# all() to check each element
res = [sub for sub in test_list if all(ele >= 0 for ele in sub)]
# printing result
print("Positive elements Tuples : " + str(res))
Output
The original list is : [(4, 5, 9), (-3, 2, 3), (-3, 5, 6), (4, 6)] Positive elements Tuples : [(4, 5, 9), (4, 6)]
Time complexity: O(n*m), where n is the number of tuples in the list and m is the number of elements in each tuple.
Auxiliary space: O(n), as a new list is created to store the positive tuples.
Method #2 : Using filter() + lambda + all()
In this, the task of filtration is performed using filter() and lambda function.
# Python3 code to demonstrate working of
# Positive Tuples in List
# Using filter() + lambda + all()
# initializing list
test_list = [(4, 5, 9), (-3, 2, 3), (-3, 5, 6), (4, 6)]
# printing original list
print("The original list is : " + str(test_list))
# all() to check each element
res = list(filter(lambda sub: all(ele >= 0 for ele in sub), test_list))
# printing result
print("Positive elements Tuples : " + str(res))
Output
The original list is : [(4, 5, 9), (-3, 2, 3), (-3, 5, 6), (4, 6)] Positive elements Tuples : [(4, 5, 9), (4, 6)]
Time complexity: O(n) where n is the number of elements in the list.
Auxiliary space: O(1) as the only extra space used is to store the result in a new list.
Method #3 : Using find(),map(),list() and join()
- Convert each tuple element to a string and then convert that tuple to a list.
- After that join elements of list using space.
- Now check if that joined list(which is a string) contains - sign in it.If - sign is found then tuple contains negative elements.
- Ignore such tuples and add the other tuples to output list.
# Python3 code to demonstrate working of
# Positive Tuples in List
# initializing list
test_list = [(4, 5, 9), (-3, 2, 3), (-3, 5, 6), (4, 6)]
# printing original list
print("The original list is : " + str(test_list))
res = []
for i in test_list:
x = list(map(str, i))
a = " ".join(x)
if(a.find("-") == -1):
res.append(i)
# printing result
print("Positive elements Tuples : " + str(res))
Output
The original list is : [(4, 5, 9), (-3, 2, 3), (-3, 5, 6), (4, 6)] Positive elements Tuples : [(4, 5, 9), (4, 6)]
Time complexity: O(n), where n is the number of tuples in the list.
Auxiliary space: O(n), as the result list is storing the positive tuples.
Method #4 : Using list(),map(),join() and startswith() methods
# Python3 code to demonstrate working of
# Positive Tuples in List
# initializing list
test_list = [(4, 5, 9), (-3, 2, 3), (-3, 5, 6), (4, 6)]
# printing original list
print("The original list is : " + str(test_list))
res = []
for i in test_list:
x = sorted(i)
x = list(map(str, x))
b = "".join(x)
if(not b.startswith("-")):
res.append(i)
# printing result
print("Positive elements Tuples : " + str(res))
Output
The original list is : [(4, 5, 9), (-3, 2, 3), (-3, 5, 6), (4, 6)] Positive elements Tuples : [(4, 5, 9), (4, 6)]
Time complexity: O(nlogn) where n is the length of the input list.
Auxiliary space: O(n) where n is the length of the input list.
Method #5: By defining a function and using len() method
# Python3 code to demonstrate working of
# Positive Tuples in List
# initializing list
test_list = [(4, 5, 9), (-3, 2, 3), (-3, 5, 6), (4, 6)]
# printing original list
print("The original list is : " + str(test_list))
res = []
def fun(x):
c = 0
for i in x:
if(i > 0):
c += 1
if(c == len(x)):
return True
return False
for i in test_list:
if(fun(i)):
res.append(i)
# printing result
print("Positive elements Tuples : " + str(res))
Output
The original list is : [(4, 5, 9), (-3, 2, 3), (-3, 5, 6), (4, 6)] Positive elements Tuples : [(4, 5, 9), (4, 6)]
Time complexity: O(nm), where n is the length of the input list and m is the length of the tuples in the list.
Auxiliary space: O(k), where k is the length of the output list.
Method #6: Using list comprehension + not any()
In this, not any() is used to check for all the tuples, list comprehension helps in the iteration of tuples.
# Python3 code to demonstrate working of
# Positive Tuples in List
# Using list comprehension + all()
# initializing list
test_list = [(4, 5, 9), (-3, 2, 3), (-3, 5, 6), (4, 6)]
# printing original list
print("The original list is : " + str(test_list))
# not any() to check each element
res = [sub for sub in test_list if not any (ele < 0 for ele in sub)]
# printing result
print("Positive elements Tuples : " + str(res))
Output
The original list is : [(4, 5, 9), (-3, 2, 3), (-3, 5, 6), (4, 6)] Positive elements Tuples : [(4, 5, 9), (4, 6)]
Time Complexity:O(n)
Auxiliary Space :O(n)
Method #7: Without using built-in function
test_list = [(4, 5, 9), (-3, 2, 3), (-3, 5, 6), (4, 6)]
result = []
# printing original list
print("The original list is : " + str(test_list))
for tup in test_list:
positive = True
for ele in tup:
if ele < 0:
positive = False
break
if positive:
result.append(tup)
# printing result
print("Positive elements Tuples : " + str(result))
# This code contributed by Vinay Pinjala.
Output
The original list is : [(4, 5, 9), (-3, 2, 3), (-3, 5, 6), (4, 6)] Positive elements Tuples : [(4, 5, 9), (4, 6)]
Time Complexity:O(n)
Auxiliary Space :O(n)
Method #8: Using for loop and if condition to filter tuples with positive elements:
Approach :
- Initialize a list of tuples with various integers - this is done using the syntax test_list = [(4, 5, 9), (-3, 2, 3), (-3, 5, 6), (4, 6)].
- Create an empty list called res to hold the tuples with positive elements - this is done using the syntax res = [].
- Loop through each tuple in the original list using a for loop - this is done using the syntax for tup in test_list:. The loop variable tup will take on the value of each tuple in the list, one at a time.
- Check if all elements in the tuple are positive using the all() function - this is done using the syntax if all(ele >= 0 for ele in tup):. The all() function returns True if all elements in the iterable passed to it satisfy the condition given in the generator expression, which in this case is ele >= 0. If any element in the tuple is less than 0, the condition is not satisfied and the if block is skipped.
- If all elements in the tuple are positive, add the tuple to the res list using the append() method - this is done using the syntax res.append(tup).
- After the loop is finished, print the resulting list of tuples with positive elements using the print() function and string concatenation - this is done using the syntax print("Positive elements Tuples : " + str(res)). The str() function is used to convert the res list to a string for concatenation with the string "Positive elements Tuples : ".
# initializing list
test_list = [(4, 5, 9), (-3, 2, 3), (-3, 5, 6), (4, 6)]
# Create an empty list to hold the tuples with positive elements
res = []
# Loop through each tuple in the original list
for tup in test_list:
# Check if all elements in the tuple are positive
if all(ele >= 0 for ele in tup):
# If so, add the tuple to the result list
res.append(tup)
# Print the result
print("Positive elements Tuples : " + str(res))
Output
Positive elements Tuples : [(4, 5, 9), (4, 6)]
Time Complexity: O(n)
Auxiliary Space: O(n)
Using regular expressions:
We cam check if a tuple contains a negative number "-" in the string of tuple, we can use regular expressions (re) in Python. The approach is to convert the tuple to a string using str() and then search for a "-" using re.search(). If the string contains a "-", it means that there is at least one negative number in the tuple.
Here's the algorithm for the same:
Algorithm:
- Initialize a list of tuples containing positive and negative integers.
- Create an empty list to store tuples with only positive integers.
- Loop through each tuple in the list of tuples.
- Convert the tuple to a string using str().
- Use re.search() to check if the string contains a "-".
- If the string does not contain a "-", it means that the tuple contains only positive integers.
- Append the tuple to the list of positive tuples.
- Print the original list of tuples and the list of tuples with only positive integers.
import re
# initializing list of tuples containing positive and negative integers
test_list = [(4, 5, 9), (-3, 2, 3), (-3, 5, 6), (4, 6)]
# empty list to store tuples with only positive integers
positive_list = []
# loop through each tuple in the list of tuples
for tup in test_list:
# convert tuple to string using str()
str_tup = str(tup)
# use re.search() to check if string contains a "-"
if not re.search('-', str_tup):
# if string does not contain "-", append tuple to positive_list
positive_list.append(tup)
# print original list of tuples and list of tuples with only positive integers
print("Original List: ", test_list)
print("Positive List: ", positive_list)
Output
Original List: [(4, 5, 9), (-3, 2, 3), (-3, 5, 6), (4, 6)] Positive List: [(4, 5, 9), (4, 6)]
The time complexity of the given code is O(nm), where n is the length of the test_list and m is the maximum length of the tuple in the list.
This is because the code involves a loop through each tuple in the list, and for each tuple, it converts it to a string and searches for the "-" character using the re.search() function, which has a time complexity of O(m).
The space complexity of the given code is also O(nm), because it creates a new string representation of each tuple, which takes up O(m) space, and stores the positive tuples in a new list, which takes up O(nm) space in the worst case.