次のコードがあります。
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))