我遇到过这个单行代码,它是一个函数定义,它会使列表列表变平以生成单个列表。有人可以逐个解释,这是什么意思?它是如何工作的?
lambda l : [item for sublist in l for item in sublist]
答案 0 :(得分:2)
遗憾的是,据我所知,没有办法真正盲目地解压缩python中无限期嵌套的列表。
Op似乎试图从
复制Making a flat list out of list of lists in Python
flatten = lambda l: [item for sublist in l for item in sublist]
我在python 3.6上测试了上面的四嵌套结构。可悲的是,它只解开了外层。我需要在循环中使用它三次才能完全解压缩结构。
import numpy as np
x = np.arange(625).reshape(5,5,5,-1).tolist() #4-nested structure
flatten = lambda x: [item for sublist in x for item in sublist]
y = flatten(x) #results in 3-nested structure of length 25.
以下功能更为通用(需要导入)也存在同样的问题:
from itertools import chain
y = list(chain.from_iterable(x)) #as per flatten() above, unpacks one level
对于多个图层,如果您不太担心开销,可以执行以下操作:
import numpy as np
y = np.array(x).flatten().tolist() #where x is any list / tuple / numpy array /
#iterable
希望以上有帮助:)
P.S。 Ahsanul Hafique的解包说明了op所要求的lambda函数的逻辑。我不相信lambda函数,你只需看看Ahsanul的解包就可以了解原因。将主要函数检查子列表是列表或列表元素,并在适当时解压缩或追加,从而创建一个使用两个函数的完全通用的列表解包器。
答案 1 :(得分:1)
这意味着将2D列表转换为1D列表,即平面列表。
例如,如果您在表单中有一个列表:
lst = [[1,2,3], [4,5,6], [7,8,9]]
您想要的输出是:
lst = [1,2,3,4,5,6,7,8,9]]
让我们看看函数定义:
lambda l : [item for sublist in l for item in sublist]
哪个等价物:
def flatten(l):
result = []
for sublist in l: # here shublist is one of the innerlists in each iteration
for item in sublist: # One item of a particular inner list
result.append(item) #Appending the item to a flat list.
return result