J'ai le code suivant:
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]
Fondamentalement, je calcule un nouvel index et l'utilise pour trouver un élément d'une liste. Afin de m'assurer que l'index est dans les limites de la liste, j'avais besoin d'écrire ces 2 if
instructions réparties sur 4 lignes. C'est assez bavard, un peu moche ... Oserais-je dire, c'est assez antipythonique .
Existe-t-il une autre solution plus simple et plus compacte? (et plus pythonique )
Oui, je sais que je peux utiliser if else
en une seule ligne, mais ce n'est pas lisible:
new_index = 0 if new_index < 0 else len(mylist) - 1 if new_index >= len(mylist) else new_index
Je sais aussi que je peux enchaîner max()
et min()
ensemble. C'est plus compact, mais je trouve que c'est un peu obscur, plus difficile de trouver des bugs si je tape mal. En d'autres termes, je ne trouve pas cela très simple.
new_index = max(0, min(new_index, len(mylist)-1))