获得三个列表的补充

问题描述 投票:1回答:1

我有三个清单: 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)的“否定”。

由于列表很长,因此可以理解有效的解决方案。

python python-3.x list
1个回答
3
投票

正如set(a) & set(b) & set(c)在评论中所述,this question已经解释了Chris_Rands的反面:

>>> (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]
© www.soinside.com 2019 - 2024. All rights reserved.