64

我如何转换

[(1,), (2,), (3,)]

[1, 2, 3]
4

11 回答 11

91

使用简单的列表理解

e = [(1,), (2,), (3,)]
[i[0] for i in e]

会给你:

[1, 2, 3]
于 2012-06-07T23:26:39.463 回答
63

@Levon 的解决方案非常适合您的情况。

作为旁注,如果元组中有可变数量的元素,您也可以使用chainfrom itertools

>>> 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]
于 2012-06-07T23:29:32.773 回答
30

如果您可以在元组中包含可变数量的元素,这是另一种选择:

>>> 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)
于 2012-06-07T23:40:43.577 回答
7
>>> a = [(1,), (2,), (3,)]
>>> zip(*a)[0]
(1, 2, 3)

对于列表:

>>> list(zip(*a)[0])
[1, 2, 3]
于 2012-06-07T23:37:34.703 回答
6

您还可以使用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]

于 2013-08-23T17:29:15.740 回答
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内置函数的最佳解决方案。

于 2017-07-30T14:08:31.700 回答
4

总有一种方法可以通过... for... in...从另一个列表中提取一个列表。在这种情况下,它将是:

[i[0] for i in e]

于 2012-12-19T10:35:41.173 回答
4

使用运算符或求和

>>> 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

于 2017-12-11T11:08:22.477 回答
3

您还可以在列表推导中解压缩元组:

e = [(1,), (2,), (3,)]
[i for (i,) in e]

仍然会给:

[1, 2, 3]
于 2012-06-14T20:42:41.807 回答
2

一班轮哟!

list(*zip(*[(1,), (2,), (3,)]))
于 2015-11-27T07:32:45.983 回答
0

在这些情况下,我喜欢这样做:

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)
于 2018-07-06T01:29:37.163 回答