次のコードがあります:
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行に分けて記述する必要がありました。これはかなり冗長で、少し見苦しいです...あえて言うなら、かなり非ニシキヘビ的。
もっとシンプルでコンパクトなソリューションは他にありますか?(もっとパイソン)
はい、1 行で使用できることはわかっています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))
見るリストの値を上限と下限 (クランプ、クリッピング、しきい値設定) で置き換える Python の方法はありますか?Numpy 配列内の値を処理するための特定のテクニック。
ベストアンサー1
これは実はかなり明確です。多くの人がすぐに習得します。コメントを使って彼らを助けることができます。
new_index = max(0, min(new_index, len(mylist)-1))