2 python 中的列表理解

2 List Comprehension in python

我试着写这个,其中 s 只是一个 int

 for box in current_boxes:
        for i in range(len(box)):
            box[i] = box[i]*s
        all_boxes.append(box)

作为列表理解。但是我的结果不一样。这就是我试过的。

all_boxes = [all_boxes.append(box[i]*s) for box in current_boxes for i in range(len(box))]

非常感谢任何帮助。

使用列表推导式时,您正在构建一个新列表。您不需要使用追加。

您也不需要使用带有列表索引和范围的交互器。

内部循环看起来像这样:

[value*s for value in box]

这里我们正在构建一个新列表,它是原始列表,每个项目乘以您的 s 变量。

现在,我们需要为您 current_boxes 中的每个框创建一个这样的列表。

执行此操作的外循环可能类似于:

[box for box in current_boxes]

合并时:

all_boxes = [[value*s for value in box] for box in current_boxes]

这应该可以解决问题

all_boxes =[list(map(lambda y : y*s, box)) for box in current_boxes]

我们正在使用内置的 python map() 函数, 它接受一个函数作为第一个参数,该函数应用于第二个可迭代参数(在我们的例子中是一个列表)的每个元素。 map() returns 是一个可迭代对象,因此我们将其转换为 'list' 以获得所需的结果。

这个'lambda y : y*s'函数也可以这样表示:

def mult_by_s(element):
    element*s

all_boxes =[list(map(mult_by_s, box)) for box in current_boxes]

但它要求 's' 是全局的,所以我认为 lambda y : y*s 更合适。

还有一种方法是只使用map函数来解决问题

 all_boxes =list(map(lambda box :list(map(lambda y : y*s, box)), current_boxes))