如何为Python中唯一的项测试多个集合?
我正在寻找一种方法,在几组之间找到独特的项目。例如,以这3套为例如何为Python中唯一的项测试多个集合?,python,set,unique,Python,Set,Unique,我正在寻找一种方法,在几组之间找到独特的项目。例如,以这3套为例 x={1,2} y={1,3} z={1,3,4,5} 我如何才能找到独特的项目?我在找这样的东西 findunique(x,y,z){2,4,5} 我尝试使用symmetric\u difference和reduce,但最终返回{1,2,4,5} 我唯一能想到的另一件事是让一个dict记录每个项目的计数,并只返回计数为1的项目。然而,这似乎是非常低效和不和谐的。“正确”的方法是什么?使用链将集合组合成一个列表。使用计数器计算
x={1,2}
y={1,3}
z={1,3,4,5}
我如何才能找到独特的项目?我在找这样的东西
findunique(x,y,z){2,4,5}
我尝试使用symmetric\u difference
和reduce
,但最终返回{1,2,4,5}
我唯一能想到的另一件事是让一个
dict
记录每个项目的计数,并只返回计数为1的项目。然而,这似乎是非常低效和不和谐的。“正确”的方法是什么?使用链将集合组合成一个列表。使用计数器
计算每个项目的出现次数。选择只出现一次的项目并创建一组
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的项目
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}
为什么不简单地{x代表x,cnt在计数器中(链(x,y,z))。如果cnt==1}
,items()没有什么大的区别,但是使用from_iterable
是。使用映射(列表,…)
,不必要地创建列表会被认为更优雅吗?@jedwards这部分确实是多余的。@DYZ关于星型符号呢<代码>计数器(链(*套))