У меня есть следующий код:
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)
Да, я знаю, что я могу использовать 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))