给出以下元组列表:
INPUT = [(1,2),(1,),(1,2,3)]
我如何将其展平为一个列表?
OUTPUT ==> [1,2,1,1,2,3]
上面有没有一个单行?
答案 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。