假設我有一個名為“y_pred”的串列,如果值小于 0,我想撰寫一個 lambda 函式將值更改為 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
uj5u.com熱心網友回復:
您想要一個運算式 ( 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]
您的錯誤“TypeError:'function' object is not iterable”來自list()嘗試迭代其引數的事實。你給了它一個 lambda,即一個函式。并且函式是不可迭代的。
你的意思是迭代函式的結果。就是map()這樣。
uj5u.com熱心網友回復:
您可以使用 numpy (假設 usinglambda不是必需的):
import numpy as np
y_pred = np.array(y_pred)
y_pred[y_pred < 0] = 0
y_pred
輸出:
array([1, 2, 3, 0])
uj5u.com熱心網友回復:
使用串列理解的一種簡單方法:
y_pred=[x if x>0 else 0 for x in y_pred_before]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/466901.html
上一篇:如何運行這個ifs
下一篇:多個條件的條件格式
