我很确定这是一个愚蠢的问题,但是我不能为错误所在打个招呼。
我有一个列表列表,我想使用列表理解来创建一个包含所有元素的列表(例如扁平化列表)。
到目前为止,我已经尝试过:
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
。
这只是在列表理解中不可行,还是我做错了什么?
答案 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]