listcomprehension中的列表清单

时间:2019-03-22 10:37:31

标签: python

我很确定这是一个愚蠢的问题,但是我不能为错误所在打个招呼。

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

到目前为止,我已经尝试过:

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

这只是在列表理解中不可行,还是我做错了什么?

2 个答案:

答案 0 :(得分:2)

您修复

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

使用list comprehension(以便更好地理解):

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

输出

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

编辑(出于可读性):

flattened = []
for sublist in lol:
    for item in sublist:
        flattened.append(item)

print(flattened)

输出

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

使用减少

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

编辑2

在我这样做的时候,这是使用deepflatten的另一种更酷的方法:

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

编辑3

使用numpy

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

您可以concatenate()列表,但会警告您   无法使用一维数组。

答案 1 :(得分:0)

您几乎是正确的!但是for子句需要反演:

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