如何为Python中唯一的项目测试几组?

时间:2018-10-07 05:46:03

标签: python set unique

我正在寻找一种在几组之间找到独特物品的方法。例如,拿这3套。

x = {1, 2}
y = {1, 3}
z = {1, 3, 4, 5}

如何找到独特的物品?我正在寻找这样的东西。

findunique(x, y, z) # {2, 4, 5}

我尝试将symmetric_differencereduce一起使用,但最终返回了{1, 2, 4, 5}

我唯一想到的另一件事是让dict跟踪每个项目有多少计数,并仅返回计数为1的计数。但是,这似乎效率很低而且难以理解。解决这个问题的“正确”方法是什么?

2 个答案:

答案 0 :(得分:2)

使用chain将集合合并为一个列表。用Counter计算每个项目的出现次数。选择仅出现一次的项目,然后进行设置。

from collections import Counter
from itertools import chain

sets = x,y,z
{x for x, cnt in Counter(chain.from_iterable(sets)).items() if cnt==1}
#{2, 4, 5}
根据@jedwards的评论进行

编辑

答案 1 :(得分:0)

您可以在将sets转换为单个列表后对其进行拼合,然后对计数等于1的项进行过滤。

lista = [x, y, z]
listb = [j for i in lista for j in i]
print(set(filter(lambda x: listb.count(x) == 1, listb)))
# {2, 4, 5}