我有以下代码:如何将整数限制在某个范围内? (在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