Je le code suivant:Comment fixer un entier à une certaine plage? (En Python)
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 indice et l'utiliser pour trouver un élément dans une liste. Afin de m'assurer que l'index est dans les limites de la liste, j'ai dû écrire ces 2 instructions if
réparties en 4 lignes. C'est assez verbeux, un peu moche ... Oserais-je dire, c'est assez un-pythonic.
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 ligne, mais il est illisible:
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 chaîne 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))
Si elle se sent "un peu obscur", faire une fonction hors de lui? – Santa
Oui, je peux écrire une fonction, mais ce n'est pas le but. La question est de savoir comment implémenter cela (soit en ligne ou dans une fonction). –
'pince = valeur lambda, minv, maxv: max (min (valeur, maxv), minv)' Utilisation de l'API de http://arma.sourceforge.net/docs.html#clamp –