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 ifdeclaraciones 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 elseen 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))