【问题标题】:Counting the number of unique sets in a list [duplicate]计算列表中唯一集的数量[重复]
【发布时间】:2019-09-05 14:11:40
【问题描述】:

如果你有这样的集合列表:

a_list = [{'a'}, {'a'}, {'a', 'b'}, {'a', 'b'}, {'a', 'c', 'b'}, {'a', 'c', 'b'}]

如何获得列表中唯一集合的数量?

我试过了:

len(set(a_list ))

我收到错误:

TypeError: unhashable type: 'set'

在这种情况下,所需的输出是:3,因为列表中有三个唯一的集合。

【问题讨论】:

    标签: python


    【解决方案1】:

    您可以使用tuple

    a_list = [{'a'}, {'a'}, {'a', 'b'}, {'a', 'b'}, {'a', 'c', 'b'}, {'a', 'c', 'b'}]
    result = list(map(set, set(map(tuple, a_list))))
    print(len(result))
    

    输出:

    [{'a', 'b'}, {'a'}, {'c', 'a', 'b'}]
    3
    

    一种功能较少的方法,也许更具可读性:

    result = [set(c) for c in set([tuple(i) for i in a_list])]
    

    【讨论】:

    • 哇哦!那很快
    • OP 可能还想考虑frozensets,以防{a, b} 应被视为与{b, a} 相同......例如:list({frozenset(el) for el in a_list})
    • 我同意 Jon 的观点。这对我来说似乎不对 - tuple{'a', 'b'}{'b','a'} 是否保证相同?
    • 然而,似乎 OP 可能会关注 len({frozenset(el) for el in a_list})...
    【解决方案2】:

    转换成元组怎么样:

    a_list = [{'a'}, {'a'}, {'a', 'b'}, {'a', 'b'}, {'a', 'c', 'b'}, {'a', 'c', 'b'}]
    
    print(len(set(map(tuple, a_list))))
    

    输出

    3
    

    【讨论】:

      猜你喜欢
      • 2013-09-10
      • 1970-01-01
      • 2018-06-17
      • 2020-06-27
      • 1970-01-01
      • 2021-08-03
      • 1970-01-01
      • 2019-02-04
      • 1970-01-01
      相关资源
      最近更新 更多