63

可能重复:
从 Python 中的列表列表中制作一个平面列表

我试图找到一种简单的方法将多维(嵌套)python 列表转换为单个列表,其中包含子列表的所有元素。

例如:

A = [[1,2,3,4,5]]

转向

A = [1,2,3,4,5]

或者

A = [[1,2], [3,4]]

转向

A = [1,2,3,4]
4

4 回答 4

74

使用itertools.chain

itertools.chain(*iterables)

创建一个迭代器,从第一个迭代器返回元素,直到它用尽,然后继续到下一个迭代器,直到所有的迭代器都用尽。用于将连续序列视为单个序列。

例子:

from itertools import chain

A = [[1,2], [3,4]]

print list(chain(*A))
# or better: (available since Python 2.6)
print list(chain.from_iterable(A))

输出是:

[1, 2, 3, 4]
[1, 2, 3, 4]
于 2012-08-08T08:30:35.770 回答
35

使用reduce功能

reduce(lambda x, y: x + y, A, [])

或者sum

sum(A, [])
于 2012-08-08T08:25:08.347 回答
8

第一种情况也可以很容易地完成:

A=A[0]
于 2012-08-08T08:25:55.457 回答
6

itertools provides the chain function for that:

From http://docs.python.org/library/itertools.html#recipes:

def flatten(listOfLists):
    "Flatten one level of nesting"
    return chain.from_iterable(listOfLists)

Note that the result is an iterable, so you may need list(flatten(...)).

于 2012-08-08T08:29:22.997 回答