如何将整数钳位到某个范围?


问题内容

我有以下代码:

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

是的,我知道我可以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))

问题答案:

实际上,这很清楚。许多人很快学会了它。您可以使用评论来帮助他们。

new_index = max(0, min(new_index, len(mylist)-1))