Tengo el siguiente código:
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]
Básicamente, calculo un nuevo índice y lo uso para encontrar algún elemento de una lista. Para asegurarme de que el índice esté dentro de los límites de la lista, necesitaba escribir esas 2 if
declaraciones distribuidas en 4 líneas. Eso es bastante detallado, un poco feo ... Me atrevo a decir que es bastante poco pitónico .
¿Existe alguna otra solución más sencilla y compacta? (y más pitónico )
Sí, sé que puedo usar if else
en una línea, pero no se puede leer:
new_index = 0 if new_index < 0 else len(mylist) - 1 if new_index >= len(mylist) else new_index
También sé que puedo encadenar max()
y min()
juntar. Es más compacto, pero siento que es un poco oscuro, más difícil de encontrar errores si lo escribo mal. En otras palabras, no lo encuentro muy sencillo.
new_index = max(0, min(new_index, len(mylist)-1))