【问题标题】:How can python merges a list of sets and return them as a set?python如何合并集合列表并将它们作为集合返回?
【发布时间】:2021-10-30 07:49:15
【问题描述】:

我有一个这样的集合列表:

set_list = [{1, 2, 3}, {4, 5, 1, 6}, {2, 3, 6}, {1, 5, 8}]

现在我想将所有集合合并在一起,并返回一组所有集合,如下所示:

final_set = {1, 2, 3, 4, 5, 6, 8}

我已使用此代码,但无法正常工作:

tmp_list = []
final_set = set(tmp_list.append(elem) for elem in set_list)

我该怎么办?

【问题讨论】:

  • “工作不正常”:请提供详细信息。

标签: python list set


【解决方案1】:

您可以使用 set().union 解包以获得干净的单衬。

>>> set().union(*set_list)
{1, 2, 3, 4, 5, 6, 8}

【讨论】:

  • 这个“意外”的工作原理是将 set_list 的第一个元素作为“self”发送。最好使用set().union(*set_list),这样您仍然可以获得set_list = [] 的正确结果而不是异常。
  • @wim 我已将其更改为 set().union。感谢您指出!
【解决方案2】:

您可以从functools module 使用reduce function。

>>> from functools import reduce
>>> set_list = [{1,2,3}, {4,5,1,6}, {2,3,6}, {1,5,8}]
>>> reduce(lambda x, y: x | y, set_list)
{1, 2, 3, 4, 5, 6, 8}

【讨论】:

    【解决方案3】:

    您可以使用以下理解来做到这一点

    set_list = [{1, 2, 3}, {4, 5, 1, 6}, {2, 3, 6}, {1, 5, 8}]
    final_set = set(elem for sub in set_list for elem in sub)
    print(final_set)
    

    输出

    {1, 2, 3, 4, 5, 6, 8}
    

    说明:这是列表扁平化理解的简单改编,可以用作sets 是可迭代的。

    【讨论】:

      【解决方案4】:

      您可以遍历列表并创建所有集合的并集:

      new_set = set()
      for i in set_list:
          new_set =  set.union(new_set, i)
      print(new_set)
      

      输出:

      {1, 2, 3, 4, 5, 6, 8}
      

      【讨论】:

      • 请注意,当您就地进行联合时,您可能会使用.update 而无需分配,即使用new_set = set.union(new_set, i) 代替new_set.update(i)
      猜你喜欢
      • 2019-04-16
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 2013-12-16
      • 2021-05-02
      • 1970-01-01
      相关资源
      最近更新 更多