我有三个列表:
a = [1, 2, 3, 4]
b = [2, 3, 4, 5]
c = [3, 4, 5, 6]
我的目标是获取所有三个列表中都不存在的所有值:[1,2,5,6]
基本上,我正在搜索set(a) & set(b) & set(c)
的“否定”。
由于列表很长,因此将是一种有效的解决方案。
答案 0 :(得分:3)
this question在评论中已在Chris_Rands中解释了set(a) & set(b) & set(c)
的相反内容:
>>> (set(a) | set(b) | set(c)) - (set(a) & set(b) & set(c))
{1, 2, 5, 6}
对于很长的列表,使用numpy可能会比较有效:
import numpy as np
from functools import reduce
a = [1, 2, 3, 4]
b = [2, 3, 4, 5]
c = [3, 4, 5, 6]
union = reduce(numpy.union1d, (a,b,c))
intersect = reduce(numpy.intersect1d, (a,b,c))
print(numpy.setdiff1d(union, intersect))
输出:
[1 2 5 6]