【发布时间】:2016-09-28 00:05:05
【问题描述】:
如何转换
[(1,), (2,), (3,)]
到
[1, 2, 3]
【问题讨论】:
标签: python
如何转换
[(1,), (2,), (3,)]
到
[1, 2, 3]
【问题讨论】:
标签: python
【讨论】:
@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()为你解包。
max(chain.from_iterable(a))之类的事情。将它插入到另一个生成器表达式或列表推导中也很容易。
如果您可以在元组中包含可变数量的元素,这是另一种选择:
>>> 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]?我对后者很熟悉。
>>> 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]
【讨论】:
>>> 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内置函数的最佳解决方案。
【讨论】:
总有一种方法可以通过 ...for...in... 从另一个列表中提取一个列表。在这种情况下,它将是:
[i[0] for i in e]
【讨论】:
使用运算符或求和
>>> 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]
>>>
如果在 python > 3 请从 functools 导入 reduce
喜欢from functools import reduce
https://docs.python.org/3/library/functools.html#functools.reduce
【讨论】:
你也可以在列表推导中解包元组:
e = [(1,), (2,), (3,)]
[i for (i,) in e]
仍会给予:
[1, 2, 3]
【讨论】:
一个班轮哟!
list(*zip(*[(1,), (2,), (3,)]))
【讨论】:
在这些情况下我喜欢这样做:
a = [(1,), (2,), (3,)]
new_a = [element for tup in a for element in tup]
即使您的元组有多个元素,这也有效。这相当于这样做:
a = [(1,), (2,), (3,)]
new_a = []
for tup in a:
for element in tup:
new_a.append(element)
【讨论】: