I would like to return values from both lists that not in the other one:
bar = [ 1,2,3,4,5 ]
foo = [ 1,2,3,6 ]
returnNotMatches( a,b )
would r
I might rely on the stdlib here...
from itertools import tee, izip
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return izip(a, b)
import difflib
def returnNotMatches(a, b):
blocks = difflib.SequenceMatcher(a=a, b=b).get_matching_blocks()
differences = []
for b1, b2 in pairwise(blocks):
d1 = a[b1.a + b1.size: b2.a]
d2 = b[b1.b + b1.size: b2.b]
differences.append((d1, d2))
return differences
print returnNotMatches([ 1,2,3,4,5 ], [ 1,2,3,6 ])
which prints: [([4, 5], [6])]
This compares the sequences as streams and finds the differences in the streams. It takes order into account, etc. If order and duplicates don't matter, then sets
are by far the way to go (so long as the elements can be hashed).