带 if 语句的 Lambda

Lambda with if statement

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

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

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

我写了这样的东西,return 一条错误消息

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

您想要一个表达式 (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]

同一事物的更短形式是列表理解 ([expr for item in iterable]):

y_pred_after = [0 if x < 0 else x for x in y_pred_before]

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

您打算迭代函数的 results。这就是 map() 所做的。

您可以使用 numpy(假设使用 lambda 不是必需的):

import numpy as np
y_pred = np.array(y_pred)
y_pred[y_pred < 0] = 0
y_pred

输出:

array([1, 2, 3, 0])

使用列表推导式执行此操作的简单方法:

y_pred=[x if x>0 else 0 for x in y_pred_before]