我有以下代碼:如何將整數限制在某個範圍內? (在Python)
new_index = index + offset
if new_index < 0:
new_index = 0
if new_index >= len(mylist):
new_index = len(mylist) - 1
return mylist[new_index]
基本上,我計算的新指標,並用它來找到一個列表中某些元素。爲了確保索引在列表的範圍內,我需要將那些2 if
語句擴展爲4行。這是相當詳細的,有點醜陋...我敢說,這是相當非pythonic。
還有其他更簡單更緊湊的解決方案嗎?(更Python的)
是的,我知道可以在一行中使用if else
,但它不是可讀:
new_index = 0 if new_index < 0 else len(mylist) - 1 if new_index >= len(mylist) else new_index
我也知道我能鏈max()
和min()
在一起。它更緊湊,但如果我輸入錯誤,我覺得它有點模糊,更難找到錯誤。換句話說,我不覺得它很直接。
new_index = max(0, min(new_index, len(mylist)-1))
如果感覺「有點晦澀」,做一個函數出來的嗎? – Santa 2010-11-03 23:40:33
是的,我可以寫一個函數,但那不是重點。問題是如何實現(內聯或在函數中)。 – 2010-11-05 12:15:35
'clamp = lambda value,minv,maxv:max(min(value,maxv),minv)'使用http://arma.sourceforge.net/docs.html#clamp的API – 2015-12-01 08:41:47