带 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]
假设我有一个名为“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]