python集合列表在所有元素中找到对称差异

标签 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}

并且我尝试按长度对列表进行排序,最小的第一个会由于两个空集而引发错误。最大优先给出与未排序相同的结果。

有什么帮助或想法吗? 谢谢 :)

最佳答案

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

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

相关文章:

python - SQLAlchemy 事件注册

java - 是否可以通过编程方式将 apk 从 google play 下载到 PC?

python - 每次我运行 "jupyter notebook"时,为什么我总是在 mac os 上得到这个?

python - freezeset 足以在 python 字典中缓存对称输入数据吗?

python - 如何创建一个仅包含另一个字典的唯一值和关联键的字典?

python - 在带有 reduce() 的 lambda 函数中使用 math.factorial

hadoop - Hadoop映射减少的删除值小于或大于映射器中的值

python - 创建通常看起来像 float 的类对象

javascript - 重组对象数组然后对对象进行分组

javascript - 将 TabIndex 添加到由 JavaScript 构建的按钮