寶慕林4294392
2022-06-02 15:53:37
我嘗試使用列表推導(dǎo)而不是標(biāo)準(zhǔn)循環(huán)來在 python 中定義一個函數(shù)。在這里,我想編寫一個函數(shù) ,get_index(CS, alpha)它將列表 CS 和閾值 alpha 作為輸入,并返回第一個元素的位置索引,例如CS[index] > alpha。例如:CS = [0, 0, 0, 0, 1, 0, 1, 4, 9, 8, 12, 13, 12, 10, 9, 7, 9]alpha = 12assert get_index(CS, alpha) == 11如果在 CS 中沒有找到這樣的元素,該函數(shù)應(yīng)該返回 -1。我的以下代碼由于SyntaxError: invalid syntax.def get_index(CS, alpha): return i for i, v in enumerate(CS) if v > alpha return -1但如果我把它放在一個標(biāo)準(zhǔn)循環(huán)中,它就可以工作,比如:def get_index(CS, alpha): for i, v in enumerate(CS): if v > alpha: return i return -1我無法區(qū)分并試圖找出原因。欣賞你的想法。謝謝你。
2 回答

夢里花落0921
TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超6個贊
如果您真的希望為此使用列表推導(dǎo),請執(zhí)行以下操作:
def get_index(CS, alpha):
l = [i for i, v in enumerate(CS) if v > alpha] or [-1]
return l[0]
盡管出于多種原因,您的第二個代碼要好得多。
發(fā)生語法錯誤,因?yàn)椴辉试S在函數(shù)內(nèi)有兩個無條件返回。

哆啦的時(shí)光機(jī)
TA貢獻(xiàn)1779條經(jīng)驗(yàn) 獲得超6個贊
您可以使用生成器表達(dá)式,它類似于列表推導(dǎo)式,但不會創(chuàng)建列表。
調(diào)用next評估生成器,直到找到第一個結(jié)果,StopIteration如果沒有,則引發(fā)。
try:
return next(i for i, v in enumerate(CS) if v > alpha)
except StopIteration:
return -1
添加回答
舉報(bào)
0/150
提交
取消