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] |
但后来我得到了
这是不能理解列表还是我做错了什么?
修复:
1 | print([el for al in lol for el in al]) |
使用
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:
当我在那里的时候,这里有另一个更酷的方法使用
1 2 | from iteration_utilities import deepflatten print(list(deepflatten(lol, depth=1))) |
。
编辑3:
使用
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.
号
你几乎是对的!但是,
1 | fl = [el for al in lol for el in al] |
。