Pythonic Way To Compare Two Lists And Print Out The Differences
I have two lists which are guaranteed to be the same length. I want to compare the corresponding values in the list (except the first item) and print out the ones which dont match.
Solution 1:
list1=[1,2,3,4]
list2=[1,5,3,4]
print [(i,j) for i,j in zip(list1,list2) if i!=j]
Output:
[(2, 5)]
Edit: Easily extended to skip n first items (same output):
list1=[1,2,3,4]
list2=[2,5,3,4]
print [(i,j) for i,j in zip(list1,list2)[1:] if i!=j]
Solution 2:
Nobody's mentioned filter:
a = [1, 2, 3]
b = [42, 3, 4]
aToCompare = a[1:]
bToCompare = b[1:]
c = filter( lambda x: (not(x in aToCompare)), bToCompare)
print c
Solution 3:
There's a nice class called difflib.SequenceMatcher
in the standard library for that.
Solution 4:
edit: oops, didn't see the "ignore first item" part
from itertools import islice,izip
for a,b in islice(izip(list1,list2),1,None):
if a != b:
print a, b
Solution 5:
Noting the requirement to skip the first line:
from itertools import izip
both = izip(list1,list2)
both.next() #skip the firstfor p in (p for p in both if p[0]!=p[1]):
print pair
- This uses
izip
, an iterator (itertools) version ofzip
, to generate an iterator through pairs of values. This way you don't use up a load of memory generating a complete zipped list. - It steps the
both
iterator by one to avoid processing the first item, and to avoid having to make the index comparison on every step through the loop. It also makes it cleaner to read. - Finally it steps through each tuple returned from a generator which yields only unequal pairs.
Post a Comment for "Pythonic Way To Compare Two Lists And Print Out The Differences"