Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为Python中唯一的项测试多个集合?_Python_Set_Unique - Fatal编程技术网

如何为Python中唯一的项测试多个集合?

如何为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的项目。然而,这似乎是非常低效和不和谐的。“正确”的方法是什么?使用链将集合组合成一个列表。使用计数器计算

我正在寻找一种方法,在几组之间找到独特的项目。例如,以这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的项目。然而,这似乎是非常低效和不和谐的。“正确”的方法是什么?

使用
链将集合组合成一个列表。使用
计数器
计算每个项目的出现次数。选择只出现一次的项目并创建一组

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关于星型符号呢<代码>计数器(链(*套))