【问题标题】:How to flatten a list of tuples into a pythonic list [duplicate]如何将元组列表展平为pythonic列表[重复]
【发布时间】:2015-02-11 19:09:57
【问题描述】:

给定以下元组列表:

INPUT = [(1,2),(1,),(1,2,3)]

如何将其展平为列表?

OUTPUT ==> [1,2,1,1,2,3]

上面有单行吗?

类似:Flatten list of Tuples in Python

【问题讨论】:

标签: python list flatten


【解决方案1】:

您可以使用sum,如果它是一个列表列表(单嵌套),它会将所有元素相加。

sum([(1,2),(1,),(1,2,3)], ())

或转换为列表:

list(sum([(1,2),(1,),(1,2,3)], ()))

在 python 中添加列表。

注意:这非常效率低下,有些人说不可读。

【讨论】:

    【解决方案2】:

    不是一行,而是两行:

    >>> out = []
    >>> map(out.extend, INPUT)
    ... [None, None, None]
    >>> print out
    ... [1, 2, 1, 1, 2, 3]
    

    声明一个列表对象并使用extend。

    【讨论】:

      【解决方案3】:
      >>> INPUT = [(1,2),(1,),(1,2,3)]
      >>> import itertools
      >>> list(itertools.chain.from_iterable(INPUT))
      [1, 2, 1, 1, 2, 3]
      

      【讨论】:

        【解决方案4】:
        >>> INPUT = [(1,2),(1,),(1,2,3)]  
        >>> import operator as op
        >>> reduce(op.add, map(list, INPUT))
        [1, 2, 1, 1, 2, 3]
        

        【讨论】:

        • 这具有二次行为(如果您将列表延长十倍,它将慢一百倍),因此对于长列表来说不是一个好主意。
        • 我同意,最好使用itertools.chain.from_iterable
        【解决方案5】:

        你可以使用list comprehension:

        >>> INPUT = [(1,2),(1,),(1,2,3)]
        >>> [y for x in INPUT for y in x]
        [1, 2, 1, 1, 2, 3]
        >>>
        

        itertools.chain.from_iterable 在这种情况下也被大量使用:

        >>> from itertools import chain
        >>> INPUT = [(1,2),(1,),(1,2,3)]
        >>> list(chain.from_iterable(INPUT))
        [1, 2, 1, 1, 2, 3]
        >>>
        

        不过,这并不完全是一条线。

        【讨论】:

          猜你喜欢
          • 2014-05-03
          • 2013-11-06
          • 1970-01-01
          • 1970-01-01
          • 2012-09-03
          • 1970-01-01
          • 2012-11-18
          • 2012-01-18
          相关资源
          最近更新 更多