如何比较python中的两个列表并返回不匹配
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/35713093/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How can I compare two lists in python and return not matches
提问by TheTask1337
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 return
会回来
[[ 4,5 ],[ 6 ]]
回答by zondo
Just use a list comprehension:
只需使用列表理解:
def returnNotMatches(a, b):
return [[x for x in a if x not in b], [x for x in b if x not in a]]
回答by user3885769
One of the simplest and quickest is:
最简单和最快的方法之一是:
new_list = [
list(set(list1).difference(list2))
]
回答by ?ukasz
This should do
这应该做
def returnNotMatches(a, b):
a = set(a)
b = set(b)
return [list(b - a), list(a - b)]
And if you don't care that the result should be a list you could just skip the final casting.
如果你不关心结果应该是一个列表,你可以跳过最后的转换。
回答by mgilson
I might rely on the stdlib here...
我可能会在这里依赖 stdlib ......
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])]
打印: [([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'tmatter, then sets
are by far the way to go (so long as the elements can be hashed).
这将序列作为流进行比较并找到流中的差异。这需要秩序考虑,等等。如果为了和副本没有事,然后sets
是目前走(只要元素可以被散列)的方式。
回答by Aaron Lael
You could use a list comprehension and zip
您可以使用列表理解和 zip
''.join([i[0] for i in zip(a, a.lower()) if i[0] == i[1]])