为什么set()。union(* list1)给我列表内两个列表的并集?

时间:2019-05-09 04:15:32

标签: python python-3.x set argument-unpacking set-union

我正在做作业,这需要我进行代码演练。我想简要介绍一下set()。union(* list1)的工作方式,以便在演练中可以回答。

list1 = [[1,2,3],[1,2,3,5,8]]

x = set().union(*list1)

print(list(x))



#output = [1, 2, 3, 5, 8]

1 个答案:

答案 0 :(得分:3)

从文档中:https://docs.python.org/3/library/stdtypes.html#frozenset.union

  

联盟(*其他)
  设置其他| ...
  返回一个新集合,其中包含集合中的元素和所有其他元素。

*list也称为列表拆包,我们在列表中获得两个子列表

In [37]: list1 = [[1,2,3],[1,2,3,5,8]]                                                                                         

In [38]: print(*list1)                                                                                                         
[1, 2, 3] [1, 2, 3, 5, 8]

因此,您运行的代码实际上创建了列表x中所有子列表的并集,并且由于您知道集合[1,2,3][1,2,3,5,8]的并集是{{1} },因此是预期的结果。

请注意,这等效于[1,2,3,5,8],其中我们正在设置list(set([1,2,3]).union(set([1,2,3,5,8])))a.union(b)a

b

此外,执行In [31]: list1 = [[1,2,3],[1,2,3,5,8]] ...: ...: x = set().union(*list1) In [32]: print(list(x)) [1, 2, 3, 5, 8] In [33]: print(list(set([1,2,3]).union(set([1,2,3,5,8])))) [1, 2, 3, 5, 8] 甚至是union的更好方法可能是使用intersection将列表列表转换为集列表,然后展开集,然后做手术

map(set,list1)