如何将元组列表展平为pythonic列表[重复]

Posted

技术标签:

【中文标题】如何将元组列表展平为pythonic列表[重复]【英文标题】:How to flatten a list of tuples into a pythonic list [duplicate] 【发布时间】: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

【问题讨论】:

扁平化元组列表的方式与扁平化列表的方式完全相同。请参阅***.com/questions/406121/…、***.com/questions/952914/… 和许多其他答案。 这能回答你的问题吗? How to make a flat list out of a list of lists? 【参考方案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]
>>>

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

【讨论】:

以上是关于如何将元组列表展平为pythonic列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何将元组分成两个独立的列表? [重复]

Python:将元组列表转换为dict列表

Python:将元组列表转换为对象列表?

将元组列表转换为python中的列表

python 将元组列表,字典转换为数据帧

如何将元组列表从 python 发送和解包到 qml?