How do I convert
[(1,), (2,), (3,)]
to
[1, 2, 3]
How do I convert
[(1,), (2,), (3,)]
to
[1, 2, 3]
@Levon的解决方案非常适合你的情况。
另外需要注意的是,如果元组中的元素数量可变,你也可以使用itertools
库中的chain
函数。
>>> a = [(1, ), (2, 3), (4, 5, 6)]
>>> from itertools import chain
>>> list(chain(a))
[(1,), (2, 3), (4, 5, 6)]
>>> list(chain(*a))
[1, 2, 3, 4, 5, 6]
>>> list(chain.from_iterable(a)) # More efficient version than unpacking
[1, 2, 3, 4, 5, 6]
chain.from_iterable()
方法可以为您完成解包操作。 - stranacmax(chain.from_iterable(a))
这样的事情。将它插入到另一个生成器表达式或列表推导中也很容易。 - QuantumChris>>> a = [(1,), (2, 3), (4, 5, 6)]
>>> [x for t in a for x in t]
[1, 2, 3, 4, 5, 6]
这基本上只是以下循环的缩写形式:
result = []
for t in a:
for x in t:
result.append(x)
for
语句是否类似于列表推导式上的尾随 if
语句,例如 [i for i in range(10) if i%2==0]
?我熟悉后者。 - Luke Davis>>> a = [(1,), (2,), (3,)]
>>> b = map(lambda x: x[0], a)
>>> b
[1, 2, 3]
使用python3时,需要将list(..)函数放在map(..)的输出后面,即
b = list(map(lambda x: x[0], a))
这是使用Python内置函数的一行代码的最佳解决方案。
>>> a = [(1,), (2,), (3,)]
>>> zip(*a)[0]
(1, 2, 3)
对于一个列表:
>>> list(zip(*a)[0])
[1, 2, 3]
sum
函数:e = [(1,), (2,), (3,)]
e_list = list(sum(e, ()))
它也可以处理列表的列表并将其转换为单个列表,但您需要按照以下方式使用它:
e = [[1, 2], [3, 4], [5, 6]]
e_list = list(sum(e, []))
这将会给你[1, 2, 3, 4, 5, 6]
。
>>> from functools import reduce ### If python 3
>>> import operator
>>> a = [(1,), (2,), (3,)]
>>> list(reduce(operator.concat, a))
[1, 2, 3]
(或者)
>>> list(sum(a,()))
[1, 2, 3]
>>>
from functools import reduce
具体请参考文档:https://docs.python.org/3/library/functools.html#functools.reduce
通过for
...in
...,总是有一种方法可以从另一个列表中提取列表。在这种情况下,可以这样做:
[i[0] for i in e]
你也可以在列表推导式中解包元组:
e = [(1,), (2,), (3,)]
[i for (i,) in e]
仍将给出:
[1, 2, 3]
一句话简介:
list(*zip(*[(1,), (2,), (3,)]))