1. ホーム
  2. python

[解決済み】整数をある範囲にクランプする方法とは?

2022-02-06 11:41:36

質問

次のようなコードがあります。

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行に分散して記述しています。これはかなり冗長で、ちょっと醜い...。あえて言えば、かなり アンピソニック .

他にもっとシンプルでコンパクトな解決策はないのでしょうか? (さらに パイソン的 )

はい、私は私が使用することができます知っている if else を1行にまとめていますが、読みにくいです。

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))