【问题标题】:Concatenating collections in Python在 Python 中连接集合
【发布时间】:2016-07-28 23:41:46
【问题描述】:

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]]

这到底是怎么回事?

【问题讨论】:

    标签: python collections concatenation itertools flatten


    【解决方案1】:

    这到底是怎么回事?

    你误读了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]
    

    【讨论】:

      【解决方案2】:

      第一个参数是一个迭代列表(元组)而不是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]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-18
        • 2018-09-01
        • 2018-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-19
        • 1970-01-01
        相关资源
        最近更新 更多