Mam następujący kod:
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]
Zasadniczo obliczam nowy indeks i używam go, aby znaleźć jakiś element z listy. Aby upewnić się, że indeks znajduje się w granicach listy, musiałem zapisać te 2 if
instrukcje rozłożone na 4 linie. To dość rozwlekłe, trochę brzydkie ... Ośmielę się powiedzieć, to całkiem nie-pytoniczne .
Czy jest jakieś inne prostsze i bardziej kompaktowe rozwiązanie? (i bardziej pythonowe )
Tak, wiem, że mogę użyć if else
w jednej linii, ale nie jest to czytelne:
new_index = 0 if new_index < 0 else len(mylist) - 1 if new_index >= len(mylist) else new_index
Wiem też, że potrafię łączyć max()
i min()
razem. Jest bardziej kompaktowy, ale wydaje mi się, że jest trochę niejasny, trudniej jest znaleźć błędy, jeśli wpiszę źle. Innymi słowy, nie uważam tego za bardzo proste.
new_index = max(0, min(new_index, len(mylist)-1))