23

可能重复:
如何使用列表理解将元组的元组转换为一维列表?

假设我有以下元组列表:

[(1,2), (1,3), (1,4), (1,5), (1,6)]

我正在尝试将其转换为一个简单的列表,如下所示:

[1,2,1,3,1,4,1,5,1,6]

如何将其转换为像上面这样的简单列表,而不必遍历每个元素并将项目逐个添加到另一个列表中?

是否有任何快速有效的方法来执行此操作而无需实际遍历原始元组列表,或者是否有一些内置函数/方法来执行此操作?

4

4 回答 4

37
lst = [(1,2), (1,3), (1,4), (1,5), (1,6)]

import itertools
list(itertools.chain(*lst))
# [1, 2, 1, 3, 1, 4, 1, 5, 1, 6]

或者:

[e for l in lst for e in l]
# [1, 2, 1, 3, 1, 4, 1, 5, 1, 6]
于 2012-09-10T16:08:27.373 回答
12
于 2012-09-10T17:44:36.353 回答
8

使用chain.from_iterable, 因为它通过懒惰地推进列表来避免不必要的一次性解包(这会导致多余的内存消耗):

>>> import itertools
>>> L = [(1,2), (1,3), (1,4), (1,5), (1,6)]
>>> list(itertools.chain.from_iterable(L))
[1, 2, 1, 3, 1, 4, 1, 5, 1, 6]
于 2012-09-10T16:22:40.630 回答
1

就 itertools 等特殊模块的性能和独立性而言,这是最好的方法:

>>> l = [(1,2), (1,3), (1,4), (1,5), (1,6)] 
>>> reduce(list.__add__,map(list,l))
[1, 2, 1, 3, 1, 4, 1, 5, 1, 6]
于 2012-09-10T16:48:37.927 回答