【发布时间】:2019-05-01 16:52:34
【问题描述】:
我想获取所有列表之间的所有专有元素。因此,如果我有 3 个列表,例如:
list1 = [1, 3, 2]
list2 = ["a", 1, 3]
list3 = [2, 0]
我的输出应该是:
['a', 0]
我尝试对所有列表进行对称差分,例如:
set(list1) ^ set(list2) ^ set(list3)
但这并不好用。
我也试过了:
def exclusive(*lista):
excl = set(lista[0])
for idx in range(len(lista)):
excl ^= set(lista[idx])
return excl
这与第一种方法的工作原理相同,但它不会产生我想要的结果。
然后我尝试了(set(list1) ^ set(list2)) ^ (set(list2) ^ (set(list3))
发现和我第一次尝试的不一样。
编辑:
我以 3 个列表为例,但函数的参数数量不定
【问题讨论】:
-
“效果不好”是什么意思?
set(list1) ^ set(list2) ^ set(list3)工作得很好。 -
如果您想要一个列表作为结果,请将结果转换为一个列表:
list(set(list1) ^...)。 -
@Aran-Fey 不,它不能完全正常工作。 3 个集合上的对称差异将返回 3 个集合的交集以及独占项。
-
更改输入值将更好地突出超过 2 个集合的顺序对称差分导致的问题。例如,按以下顺序尝试使用以下输入的建议解决方案:
[1, 3, 2, 0]、['a', 1, 3, 0]、[2, 0]。在这种情况下,唯一应该产生的排他元素是“a”。 -
@DYZ 我更喜欢套装。我只想要元素组
标签: python set-operations