У меня есть следующий код:
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 )
Да, я знаю, что могу использовать , если еще
в одной строке, но он не читается:
new_index = 0 if new_index < 0 else len(mylist) - 1 if new_index >= len(mylist) else new_index
Я также знаю, что могу связать max ()
и мин ()
вместе. Он более компактный, но мне кажется, что он непонятен, труднее найти ошибки, если я напечатаю его неправильно. Другими словами, я не Я считаю это очень простым.
new_index = max(0, min(new_index, len(mylist)-1))