带有 if 语句的 Lambda

use*_*402 2 python lambda if-statement

假设我有一个名为“y_pred”的列表,我想编写一个 lambda 函数,如果该值小于 0,则将该值更改为 0。

前:y_pred=[1,2,3,-1]

后:y_pred=[1,2,3,0]

我写了这样的东西,并返回错误信息

y_pred=list(lambda x: 0 if y_pred[x]<0 else y_pred[x])    
TypeError: 'function' object is not iterable
Run Code Online (Sandbox Code Playgroud)

Tom*_*lak 7

您需要将表达式 ( a if cond else b) 映射到列表上:

y_pred_before = [1, 2, 3, -1]
y_pred_after = list(map(lambda x: 0 if x < 0 else x, y_pred_before))
# => [1, 2, 3, 0]
Run Code Online (Sandbox Code Playgroud)

同一事物的缩写形式是列表推导式 ( [expr for item in iterable]):

y_pred_after = [0 if x < 0 else x for x in y_pred_before]
Run Code Online (Sandbox Code Playgroud)

您的错误“TypeError:'function'对象不可迭代”list()来自尝试迭代其参数的事实。你给了它一个 lambda,即一个函数。并且函数是不可迭代的。

您的意思是迭代函数的结果。就是这样map()