考虑这个集合列表
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
(计数)。最后,使用集合理解来过滤 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()
。
关于python集合列表在所有元素中找到对称差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50342558/