如何将元组列表展平为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列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章