У меня такой код:
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))