关于python:列表理解中的列表列表

list of list in listcomprehension

本问题已经有最佳答案,请猛点这里访问。

我很肯定这是一个愚蠢的问题,但我不能把我的头绕在哪里是错误的周围。

我有一个列表列表,我想使用列表理解创建一个包含所有元素的列表(如扁平列表)。

到目前为止我所做的尝试:

1
2
lol = [[0,1,2,3], [4,5,6,7], [8,9,10,11]]
fl = [el for el in al for al in lol]

但后来我得到了NameError: name 'al' is not defined

这是不能理解列表还是我做错了什么?


修复:

1
print([el for al in lol for el in al])

使用list comprehension(为了更好地理解):

1
2
lol = [[0,1,2,3], [4,5,6,7], [8,9,10,11]]
print([item for sublist in lol for item in sublist])

输出:

1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

编辑(为了可读性):

1
2
3
4
5
6
flattened = []
for sublist in lol:
    for item in sublist:
        flattened.append(item)

print(flattened)

输出:

1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

使用reduce:

1
2
from functools import reduce
print(reduce(lambda x, y: x + y, lol))

编辑2:

当我在那里的时候,这里有另一个更酷的方法使用deepflatten

1
2
from iteration_utilities import deepflatten      
print(list(deepflatten(lol, depth=1)))

编辑3:

使用numpy

1
2
import numpy as np
print (np.concatenate(lol))

You could just concatenate() the lists but with a warning that it
wont work with single dimensional arrays.


你几乎是对的!但是,for条款需要倒置:

1
fl = [el for al in lol for el in al]