![](/img/trans.png)
[英]Python sets: difference() vs symmetric_difference()
[英]python list of sets find symmetric difference in all elements
考虑这个集合列表
my_input_list= [
{1,2,3,4,5},
{2,3,7,4,5},
set(),
{1,2,3,4,5,6},
set(),]
我想获得唯一的独占元素6和7作为响应,列表或集合。 设置首选。
我尝试了print reduce(set.symmetric_difference,my_input_list)
但是给出了
{2,3,4,5,6,7}
我尝试按长度排序列表,最小的首先由于两个空集引起错误。 最大的第一个给出与未排序相同的结果。
有任何帮助或想法吗? 谢谢 :)
看起来最直接的解决方案是计算所有内容并返回仅出现一次的元素。
此解决方案使用chain.from_iterable
(以展平您的设置)+ Counter
(计算事物)。 最后,使用set comprehension来过滤count == 1的元素。
from itertools import chain
from collections import Counter
c = Counter(chain.from_iterable(my_input_list))
print({k for k in c if c[k] == 1})
{6, 7}
快速说明; 空文字{}
用于表示空dict
,未set
。 对于后者,使用set()
。
你可以使用itertools.chain
和collection.Counter
:
from itertools import chain
from collections import Counter
r = {k for k,v in Counter(chain.from_iterable(my_input_list)).items() if v==1}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.