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 ifinstrukcje 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 elsew 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))