私は次のコードを持っています:
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です。
他にもっとシンプルでコンパクトなソリューションはありますか?(そしてもっとpythonic)
はい、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))