我之前在stackoverflow上看过列表比较的方法,但它们似乎都返回列表的匹配 - 而不是非匹配。我有兴趣找到返回非匹配值的方法(可能还有它们来自哪个列表)。
listA = ['spanish', 'english', 'chinese', 'italian', 'english']
listB = ['spanish', 'english', 'italian', 'japanese']
我想至少返回哪些单词在bouth中找不到;
['chinese','japanese']
如果不是这样;
[('chinese',listA),('japanese',listB)]
请提供此比较方法的任何解决方案。
答案 0 :(得分:6)
>>> set(listA).symmetric_difference(listB)
set(['japanese', 'chinese'])
答案 1 :(得分:2)
您可以使用sets:
>>> listA = ['spanish', 'english', 'chinese', 'italian', 'english']
>>> listB = ['spanish', 'english', 'italian', 'japanese']
>>> list(set(listA) ^ set(listB)) # Note that the results will be unordered
['japanese', 'chinese']
>>>
^
运算符找到两组之间的对称差异。
答案 2 :(得分:1)
换句话说,这就是您要寻找的内容:set(listA) - set(listB) | set(listB) - set(listA)
>>> listA = ['spanish', 'english', 'chinese', 'italian', 'english']
>>> listB = ['spanish', 'english', 'italian', 'japanese']
>>> setA = set(listA)
>>> setB = set(listB)
>>> setA - setB | setB - setA
set(['japanese', 'chinese'])
>>>
答案 3 :(得分:0)
替代解决方案,不涉及set()
:
>>> from collections import Counter
>>> [v for v, k in Counter(listA + listB).iteritems() if k==1]
['japanese', 'chinese']