集合的python列表在所有元素

时间:2018-05-15 04:54:02

标签: python set reduce

考虑这个集合列表

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}

我尝试按长度排序列表,最小的第一个因两个空集引起错误。最大的第一个结果与未排序的结果相同。

有任何帮助或想法吗? 谢谢:)

2 个答案:

答案 0 :(得分:5)

看起来最直接的解决方案是计算所有内容并返回仅出现一次的元素。

此解决方案使用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()

答案 1 :(得分:2)

您可以使用itertools.chaincollection.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}