Python | Intersection in Tuple Records Data
Last Updated :
17 Apr, 2023
Sometimes, while working with data, we may have a problem in which we require to find the matching records between two lists that we receive. This is a very common problem and records usually occur as a tuple. Let's discuss certain ways in which this problem can be solved.
Method #1 : Using list comprehension List comprehension can opt as method to perform this task in one line rather than running a loop to find the common element. In this, we just iterate for single list and check if any element occurs in other one.
Python3
# Python3 code to demonstrate working of
# Intersection in Tuple Records Data
# Using list comprehension
# Initializing lists
test_list1 = [('gfg', 1), ('is', 2), ('best', 3)]
test_list2 = [('i', 3), ('love', 4), ('gfg', 1)]
# printing original lists
print("The original list 1 is : " + str(test_list1))
print("The original list 2 is : " + str(test_list2))
# Intersection in Tuple Records Data
# Using list comprehension
res = [ele1 for ele1 in test_list1
for ele2 in test_list2 if ele1 == ele2]
# printing result
print("The Intersection of data records is : " + str(res))
Output : The original list 1 is : [('gfg', 1), ('is', 2), ('best', 3)]
The original list 2 is : [('i', 3), ('love', 4), ('gfg', 1)]
The Intersection of data records is : [('gfg', 1)]
Time Complexity: O(n^2), where n is the length of the longer list. In the worst-case scenario where both lists have the same length, the time complexity will be O(n^2).
Auxiliary Space: O(k), where k is the number of common elements in both lists. This is because the result list res will only contain the common elements.
Method #2: Using set.intersection() This task can also be performed in smaller way using the generic set intersection. In this, we first convert the list of records to a set and then perform its intersection using intersection().
Python3
# Python3 code to demonstrate working of
# Intersection in Tuple Records Data
# Using set.intersection()
# Initializing lists
test_list1 = [('gfg', 1), ('is', 2), ('best', 3)]
test_list2 = [('i', 3), ('love', 4), ('gfg', 1)]
# printing original lists
print("The original list 1 is : " + str(test_list1))
print("The original list 2 is : " + str(test_list2))
# Intersection in Tuple Records Data
# set.intersection()
res = list(set(test_list1).intersection(set(test_list2)))
# printing result
print("The Intersection of data records is : " + str(res))
Output : The original list 1 is : [('gfg', 1), ('is', 2), ('best', 3)]
The original list 2 is : [('i', 3), ('love', 4), ('gfg', 1)]
The Intersection of data records is : [('gfg', 1)]
Time complexity: O(m+n), where m and n are the lengths of test_list1 and test_list2 respectively.
Auxiliary space: O(m+n), where m and n are the lengths of test_list1 and test_list2 respectively.
Method #3 : Using dict
This method creates two dictionaries from the input lists of tuples, finds the common keys between the two dictionaries, and creates a new list of tuples with the common keys and their corresponding values from the first dictionary.
Python3
# define the two lists of tuples
list1 = [('gfg', 1), ('is', 2), ('best', 3)]
list2 = [('i', 3), ('love', 4), ('gfg', 1)]
# create two dictionaries from the lists
dict1 = dict(list1)
dict2 = dict(list2)
# find the keys that are present in both dictionaries
common_keys = set(dict1.keys()).intersection(set(dict2.keys()))
# create a list of tuples with the common keys and their values
result = [(key, dict1[key]) for key in common_keys]
# print the result
print("The Intersection of data records is :", result)
OutputThe Intersection of data records is : [('gfg', 1)]
Time complexity: O(n)
Auxiliary Space: O(n)
Method #4 : Using List Comprehension and filter() function:
Algorithm:
1. Define two test lists of tuples - test_list1 and test_list2.
2.Use filter() function to filter out the tuples from test_list1 which are present in test_list2.
3. Return the filtered tuples as a list and store it in variable res.
4. Print the result.
Python3
test_list1 = [('gfg', 1), ('is', 2), ('best', 3)]
test_list2 = [('i', 3), ('love', 4), ('gfg', 1)]
# printing original lists
print("The original list 1 is : " + str(test_list1))
print("The original list 2 is : " + str(test_list2))
res = list(filter(lambda t: t in test_list2, test_list1))
print("The Intersection of data records is : " + str(res))
#This code is contributed by Jyothi pinjala
OutputThe original list 1 is : [('gfg', 1), ('is', 2), ('best', 3)]
The original list 2 is : [('i', 3), ('love', 4), ('gfg', 1)]
The Intersection of data records is : [('gfg', 1)]
Time Complexity:
The filter() function has a time complexity of O(n) where n is the length of the iterable being filtered.
In the worst case, all tuples from test_list1 are compared with all tuples from test_list2, giving a time complexity of O(n^2).
Thus, the time complexity of the algorithm is O(n^2).
Auxiliary Space:
The auxiliary space of the algorithm is O(m), where m is the length of the filtered list.
In the worst case, all tuples from test_list1 are present in test_list2, giving a space complexity of O(n).
Thus, the space complexity of the algorithm is O(n).
Method 5 : using a loop to iterate through one of the lists and check if each element exists in the other list.
Here is a step-by-step approach for this method:
- Initialize an empty list called intersection.
- Loop through each tuple in test_list1.
- For each tuple, extract the first element (string) and check if it exists in test_list2 by looping through each tuple in test_list2 and comparing the first element of the tuple.
- If the first element exists in test_list2, append the tuple from test_list1 to intersection.
- Print the intersection list.
Python3
# test data
test_list1 = [('gfg', 1), ('is', 2), ('best', 3)]
test_list2 = [('i', 3), ('love', 4), ('gfg', 1)]
# initialize an empty list
intersection = []
# loop through each tuple in test_list1
for tuple1 in test_list1:
# extract the first element (string)
str1 = tuple1[0]
# loop through each tuple in test_list2
for tuple2 in test_list2:
# extract the first element (string)
str2 = tuple2[0]
# if the strings match, append the tuple from test_list1 to intersection
if str1 == str2:
intersection.append(tuple1)
# print the intersection
print("The intersection of data records is:", intersection)
OutputThe intersection of data records is: [('gfg', 1)]
The time complexity of this method is O(n^2) because it requires iterating through both lists in a nested loop.
The auxiliary space is O(k) where k is the number of common elements in both lists since we only store those common elements in the intersection list.
Method 6: Using the itertools module
- Import the itertools module.
- Use the itertools.product() function to create a Cartesian product of the two lists.
- Use list comprehension to filter the resulting list to only include tuples where the first element of the tuple in test_list1 matches the first element of the tuple in test_list2.
- Use list comprehension to extract the tuples from the resulting list that match the condition in step 3.
- Assign the resulting list to the intersection variable and print it.
Python3
import itertools
test_list1 = [('gfg', 1), ('is', 2), ('best', 3)]
test_list2 = [('i', 3), ('love', 4), ('gfg', 1)]
# use itertools.product() to create a Cartesian product of the two lists
cartesian_product = list(itertools.product(test_list1, test_list2))
# use list comprehension to filter the resulting list
filtered_list = [x for x in cartesian_product if x[0][0] == x[1][0]]
# use list comprehension to extract the tuples that match the condition in step 3
intersection = [x[0] for x in filtered_list]
# print the intersection
print("The intersection of data records is:", intersection)
OutputThe intersection of data records is: [('gfg', 1)]
Time complexity: O(n)
Auxiliary space: O(n)
Explore
Python Fundamentals
Python Data Structures
Advanced Python
Data Science with Python
Web Development with Python
Python Practice