Python列表比较差异

时间:2014-07-17 18:20:28

标签: python list

我之前在stackoverflow上看过列表比较的方法,但它们似乎都返回列表的匹配 - 而不是非匹配。我有兴趣找到返回非匹配值的方法(可能还有它们来自哪个列表)。

listA = ['spanish', 'english', 'chinese', 'italian', 'english']
listB = ['spanish', 'english', 'italian', 'japanese']

我想至少返回哪些单词在bouth中找不到;

['chinese','japanese']

如果不是这样;

[('chinese',listA),('japanese',listB)]

请提供此比较方法的任何解决方案。

4 个答案:

答案 0 :(得分:6)

使用set.symmetric_difference

>>> 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']