Given a binary matrix whose elements are only 0 and 1, we need to print the rows which are duplicate of rows which are already present in the matrix.
Examples:
Input : [[1, 1, 0, 1, 0, 1], [0, 0, 1, 0, 0, 1], [1, 0, 1, 1, 0, 0], [1, 1, 0, 1, 0, 1], [0, 0, 1, 0, 0, 1], [0, 0, 1, 0, 0, 1]] Output : (1, 1, 0, 1, 0, 1) (0, 0, 1, 0, 0, 1)
We have existing solution for this problem please refer Find duplicate rows in a binary matrix link. We can solve this problem very quickly in Python using Counter() method. Approach is very simple,
- Create a dictionary using counter method which will have rows as key and it’s frequency as value.
- Now traverse dictionary completely and print all rows which have frequency greater than 1.
Implementation:
Python3
# Function to find duplicate rows in a binary matrix from collections import Counter
def duplicate( input ):
# since lists are unhasable for counter method
# because lists are mutable so first we will cast
# each row (list) into tuple
input = map ( tuple , input )
# now create dictionary
freqDict = Counter( input )
# print all rows having frequency greater than 1
for (row,freq) in freqDict.items():
if freq> 1 :
print (row)
# Driver program if __name__ = = "__main__" :
input = [[ 1 , 1 , 0 , 1 , 0 , 1 ],
[ 0 , 0 , 1 , 0 , 0 , 1 ],
[ 1 , 0 , 1 , 1 , 0 , 0 ],
[ 1 , 1 , 0 , 1 , 0 , 1 ],
[ 0 , 0 , 1 , 0 , 0 , 1 ],
[ 0 , 0 , 1 , 0 , 0 , 1 ]]
duplicate( input )
|
Output
(1, 1, 0, 1, 0, 1) (0, 0, 1, 0, 0, 1)