考虑这个集合列表
my_input_list= [
{1,2,3,4,5},
{2,3,7,4,5},
set(),
{1,2,3,4,5,6},
set(),]
Run Code Online (Sandbox Code Playgroud)
我想获得唯一的独占元素6和7作为响应,列表或集合.设置首选.
我试过
print reduce(set.symmetric_difference,my_input_list)但是给了
{2,3,4,5,6,7}
Run Code Online (Sandbox Code Playgroud)
我尝试按长度排序列表,最小的首先由于两个空集引起错误.最大的第一个给出与未排序相同的结果.
有任何帮助或想法吗?谢谢 :)
看起来最直接的解决方案是计算所有内容并返回仅出现一次的元素.
此解决方案使用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}
Run Code Online (Sandbox Code Playgroud)
快速说明; 空文字{}用于表示空dict,而不是set.对于后者,请使用set().
| 归档时间: |
|
| 查看次数: |
181 次 |
| 最近记录: |