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
from functools import reduce
test_list1 = [ 3 , 5 , 6 , 7 , 3 , 2 ]
test_list2 = [ 5 , 5 , 3 , 9 , 8 ]
print ( "The original list 1 : " + str (test_list1))
print ( "The original list 2 : " + str (test_list2))
res = reduce ( lambda x, y: x + test_list1.count(y), set (test_list2), 0 )
print ( "All matching elements : " + str (res))
|
OutputThe 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
test_list1 = [ 3 , 5 , 6 , 7 , 2 , 3 ]
test_list2 = [ 5 , 5 , 3 , 9 , 8 ]
print ( "The original list 1 : " + str (test_list1))
print ( "The original list 2 : " + str (test_list2))
res = sum (ele in test_list1 for ele in test_list2)
print ( "All matching elements : " + str (res))
|
OutputThe 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
from functools import reduce
test_list1 = [ 3 , 5 , 6 , 7 , 3 , 2 ]
test_list2 = [ 5 , 5 , 3 , 9 , 8 ]
print ( "The original list 1 : " + str (test_list1))
print ( "The original list 2 : " + str (test_list2))
res = reduce ( lambda x, y: x + test_list1.count(y), set (test_list2), 0 )
print ( "All matching elements : " + str (res))
|
OutputThe 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
from collections import Counter
test_list1 = [ 3 , 5 , 6 , 7 , 2 , 3 ]
test_list2 = [ 5 , 5 , 3 , 9 , 8 ]
freq = Counter(test_list1)
print ( "The original list 1 : " + str (test_list1))
print ( "The original list 2 : " + str (test_list2))
res = 0
for i in test_list2:
if i in freq.keys():
res + = 1
print ( "All matching elements : " + str (res))
|
OutputThe 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
import operator as op
test_list1 = [ 3 , 5 , 6 , 7 , 2 , 3 ]
test_list2 = [ 5 , 5 , 3 , 9 , 8 ]
print ( "The original list 1 : " + str (test_list1))
print ( "The original list 2 : " + str (test_list2))
res = 0
for i in test_list2:
if op.countOf(test_list1, i) > 0 :
res + = 1
print ( "All matching elements : " + str (res))
|
OutputThe 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)