如何将元组列表展平为pythonic列表

时间:2014-12-13 00:55:38

标签: python list flatten

给出以下元组列表:

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

我如何将其展平为一个列表?

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

上面有没有一个单行?

类似:Flatten list of Tuples in Python

5 个答案:

答案 0 :(得分:9)

您可以使用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]
>>>

但这并不是一个单行的。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

>>> INPUT = [(1,2),(1,),(1,2,3)]  
>>> import operator as op
>>> reduce(op.add, map(list, INPUT))
[1, 2, 1, 1, 2, 3]

答案 3 :(得分:0)

你可以使用sum,如果它是列表列表(单独嵌套),它会添加所有元素。

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

或转换为列表:

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

添加列表在python中有效。

注意:效率低,有些人说不可读。

答案 4 :(得分:0)

不是一行而是两行:

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

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