代码之家  ›  专栏  ›  技术社区  ›  Daffy

如何为Python中唯一的项测试多个集?

  •  1
  • Daffy  · 技术社区  · 7 年前

    我正在寻找一种方法来找出几组之间的独特项目。以这3套为例。

    x = {1, 2}
    y = {1, 3}
    z = {1, 3, 4, 5}
    

    我怎样才能找到独一无二的物品?我在找这样的东西。

    findunique(x, y, z) # {2, 4, 5}
    

    symmetric_difference 具有 reduce {1, 2, 4, 5} .

    我唯一能想到的就是 dict

    2 回复  |  直到 7 年前
        1
  •  2
  •   DYZ    7 年前

    将集合与 chain . 计算每个项目的出现次数 Counter . 选择只出现一次的项目,并将其设置为一组。

    from collections import Counter
    from itertools import chain
    
    sets = x,y,z
    {x for x, cnt in Counter(chain.from_iterable(sets)).items() if cnt==1}
    #{2, 4, 5}
    

    编辑 基于@jedwards的评论。

        2
  •  0
  •   vash_the_stampede    7 年前

    sets 将它们转换为单个列表后,再对其进行筛选,以查找计数等于1的项。

    lista = [x, y, z]
    listb = [j for i in lista for j in i]
    print(set(filter(lambda x: listb.count(x) == 1, listb)))
    # {2, 4, 5}