Ho il codice seguente:
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]
Fondamentalmente, calcolo un nuovo indice e lo uso per trovare qualche elemento da un elenco. Per assicurarmi che l'indice fosse all'interno dei limiti dell'elenco, avevo bisogno di scrivere quelle 2 if
istruzioni distribuite su 4 righe. È piuttosto prolisso, un po 'brutto ... Oserei dire, è abbastanza non pitonico .
C'è qualche altra soluzione più semplice e compatta? (e più pitonico )
Sì, lo so che posso usare if else
in una riga, ma non è leggibile:
new_index = 0 if new_index < 0 else len(mylist) - 1 if new_index >= len(mylist) else new_index
So anche che posso incatenare max()
e min()
insieme. È più compatto, ma sento che è un po 'oscuro, più difficile da trovare bug se lo digito male. In altre parole, non lo trovo molto semplice.
new_index = max(0, min(new_index, len(mylist)-1))