У мене є такий код:
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
в одному рядку, але це не читається:
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))