这个代码压缩列表列表意味着什么?

时间:2017-04-30 15:09:08

标签: python

我遇到过这个单行代码,它是一个函数定义,它会使列表列表变平以生成单个列表。有人可以逐个解释,这是什么意思?它是如何工作的?

lambda l : [item for sublist in l for item in sublist]

2 个答案:

答案 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