在Python中连接集合

时间:2016-04-07 21:07:58

标签: python collections concatenation itertools flatten

据说

itertools.chain转换chain('ABC', 'DEF') --> A B C D E F。然而,我明白了

>>> Set(itertools.chain([(1,2,3),(4,5,6)]))
Set([(4, 5, 6), (1, 2, 3)])

我发现没有任何等级受到影响。同样,list(itertools.chain([[1,2,3],[4,5,6]])) is said会对列表产生影响。但我认为在我的情况下没有扁平化

>>> list(itertools.chain([[1,2,3],[4,5,6]]))
[[1, 2, 3], [4, 5, 6]]

到底是怎么回事?

2 个答案:

答案 0 :(得分:2)

  
    

到底是怎么回事?

  

您误读了answer you referenced

答案就是这句话:

merged = list(itertools.chain(*list2d))

请注意使用星号(或“splat”)运算符。

在你的问题中,没有这样的运营商:

>>> list(itertools.chain([[1,2,3],[4,5,6]]))  
[[1, 2, 3], [4, 5, 6]]

要了解您所引用的答案,请尝试以下方法:

>>> list(itertools.chain(*[[1,2,3],[4,5,6]]))
[1, 2, 3, 4, 5, 6]

这相当于删除最外面的括号:

>>> list(itertools.chain([1,2,3],[4,5,6]))
[1, 2, 3, 4, 5, 6]

答案 1 :(得分:1)

第一个参数是迭代(元组)列表而不是one iterable。您可以使用chain.from_iterable()展平您的列表:

>>> from itertools import chain
>>> list(chain.from_iterable([(1,2,3),(4,5,6)]))
[1, 2, 3, 4, 5, 6]