Open In App

Python – Count of matching elements among lists (Including duplicates)

Last Updated : 01 Feb, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

Given 2 lists, count all the elements that are similar in both the lists including duplicated.

Input : test_list1 = [3, 5, 6, 7, 2, 3, 5], test_list2 = [5, 5, 3, 9, 8, 5] 
Output : 4 
Explanation : 3 repeats 2 times, and 5 two times, totalling to 4. 

Input : test_list1 = [3, 5, 6], test_list2 = [5, 3, 9] 
Output : 2 
Explanation : 3 repeats 1 time, and 5 one time, totalling to 2.

Method #1 : Using loop 

This is brute way in which this task can be performed. In this, we iterate for each element of other list while iterating for one list, and increase the counter.

Python3




# Python3 code to demonstrate working of
# Count of matching elements among lists [ Including duplicates ]
# Using reduce
from functools import reduce
 
# initializing lists
test_list1 = [3, 5, 6, 7, 3, 2]
test_list2 = [5, 5, 3, 9, 8]
 
# printing original lists
print("The original list 1 : " + str(test_list1))
print("The original list 2 : " + str(test_list2))
 
# using reduce to count the element of list
res = reduce(lambda x, y: x+test_list1.count(y), set(test_list2), 0)
 
# printing result
print("All matching elements : " + str(res))


Output

The original list 1 : [3, 5, 6, 7, 3, 2]
The original list 2 : [5, 5, 3, 9, 8]
All matching elements : 3

Time Complexity: O(N)
Auxiliary Space: O(N)

Python3




# Python3 code to demonstrate working of
# Count of matching elements among lists [ Including duplicates ]
# Using sum() + generator expression
 
# initializing lists
test_list1 = [3, 5, 6, 7, 2, 3]
test_list2 = [5, 5, 3, 9, 8]
 
# printing original lists
print("The original list 1 : " + str(test_list1))
print("The original list 2 : " + str(test_list2))
 
# using sum to count occurrences
res = sum(ele in test_list1 for ele in test_list2)
 
# printing result
print("All matching elements : " + str(res))


Output

The original list 1 : [3, 5, 6, 7, 2, 3]
The original list 2 : [5, 5, 3, 9, 8]
All matching elements : 3

Time Complexity: O(N)
Auxiliary Space: O(1)

Method#3: Using reduce + count function

The combination of above method can be used to solve this problem. In this, we count element by using reduce and count function. 

Python3




# Python3 code to demonstrate working of
# Count of matching elements among lists [ Including duplicates ]
# Using reduce
from functools import reduce
 
# initializing lists
test_list1 = [3, 5, 6, 7, 3, 2]
test_list2 = [5, 5, 3, 9, 8]
 
# printing original lists
print("The original list 1 : " + str(test_list1))
print("The original list 2 : " + str(test_list2))
 
# using reduce to count the element of list
res = reduce(lambda x, y: x+test_list1.count(y), set(test_list2), 0)
 
# printing result
print("All matching elements : " + str(res))


Output

The original list 1 : [3, 5, 6, 7, 3, 2]
The original list 2 : [5, 5, 3, 9, 8]
All matching elements : 3

Time Complexity: O(N)
Auxiliary Space: O(N)

Method#4: Using Counter() function

Python3




# Python3 code to demonstrate working of
# Count of matching elements among lists [ Including duplicates ]
from collections import Counter
# initializing lists
test_list1 = [3, 5, 6, 7, 2, 3]
test_list2 = [5, 5, 3, 9, 8]
 
freq = Counter(test_list1)
# printing original lists
print("The original list 1 : " + str(test_list1))
print("The original list 2 : " + str(test_list2))
 
# using sum to count occurrences
res = 0
for i in test_list2:
    if i in freq.keys():
        res += 1
# printing result
print("All matching elements : " + str(res))


Output

The original list 1 : [3, 5, 6, 7, 2, 3]
The original list 2 : [5, 5, 3, 9, 8]
All matching elements : 3

Time Complexity: O(N)
Auxiliary Space: O(N)

Method #5: Using operator.countOf() method:

Python3




# Python3 code to demonstrate working of
# Count of matching elements among lists [ Including duplicates ]
import operator as op
# initializing lists
test_list1 = [3, 5, 6, 7, 2, 3]
test_list2 = [5, 5, 3, 9, 8]
 
 
# printing original lists
print("The original list 1 : " + str(test_list1))
print("The original list 2 : " + str(test_list2))
 
# using sum to count occurrences
res = 0
for i in test_list2:
    if op.countOf(test_list1, i) > 0:
        res += 1
# printing result
print("All matching elements : " + str(res))


Output

The original list 1 : [3, 5, 6, 7, 2, 3]
The original list 2 : [5, 5, 3, 9, 8]
All matching elements : 3

Time Complexity: O(N)
Auxiliary Space: O(N)



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads