我正在寻找一种在几组之间找到独特物品的方法。例如,拿这3套。
x = {1, 2}
y = {1, 3}
z = {1, 3, 4, 5}
如何找到独特的物品?我正在寻找这样的东西。
findunique(x, y, z) # {2, 4, 5}
我尝试将symmetric_difference
与reduce
一起使用,但最终返回了{1, 2, 4, 5}
。
我唯一想到的另一件事是让dict
跟踪每个项目有多少计数,并仅返回计数为1的计数。但是,这似乎效率很低而且难以理解。解决这个问题的“正确”方法是什么?
答案 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}