Entender la notación de las rodajas
Necesito una buena explicación (las referencias son un plus) sobre la notación slice de Python's.
Para mí, esta notación necesita un poco de recoger.
Parece extremadamente potente, pero no he conseguido entenderla.
2992
3
En realidad es muy sencillo:
También existe el valor
step
, que se puede utilizar con cualquiera de los anteriores:El punto clave que hay que recordar es que el valor
:stop
representa el primer valor que no está en la porción seleccionada. Así, la diferencia entrestop
ystart
es el número de elementos seleccionados (sistep
es 1, el valor por defecto).La otra característica es que
start
ostop
puede ser un número negativo, lo que significa que cuenta desde el final del array en lugar del principio. Así:Del mismo modo,
step
puede ser un número negativo:Python es amable con el programador si hay menos elementos de los que pide. Por ejemplo, si pides
a[:-2]
ya
sólo contiene un elemento, obtienes una lista vacía en lugar de un error. A veces se prefiere el error, así que hay que tener en cuenta que esto puede ocurrir.Relación con el objeto
slice()
El operador de corte
[]
está siendo utilizado en el código anterior con un objetoslice()
utilizando la notación:
(que sólo es válida dentro de[]
), es decir:equivale a:
Los objetos Slice también se comportan de forma ligeramente diferente dependiendo del número de argumentos, de forma similar a
range()
, es decir, se admiten tantoslice(stop)
comoslice(start, stop[, step])
. Para omitir la especificación de un argumento determinado, se puede utilizarNone
, de modo que, por ejemplo,a[inicio:]
es equivalente aa[slice(inicio, None)]
oa[::-1]
es equivalente aa[slice(None, None, -1)]
.Aunque la notación basada en
:
es muy útil para el corte simple, el uso explícito de objetosslice()
simplifica la generación programática del corte.El tutorial de Python habla de ello (desplázate un poco hacia abajo hasta que llegues a la parte del corte).
El diagrama de arte ASCII también es útil para recordar cómo funcionan las rebanadas:
Enumerar las posibilidades que permite la gramática:
Por supuesto, si
(high-low)%stride != 0
, entonces el punto final será un poco más bajo quehigh-1
.Si
stride
es negativo, el ordenamiento se cambia un poco ya que estamos contando hacia abajo:Las secuencias extendidas (con comas y elipses) son usadas mayormente sólo por estructuras de datos especiales (como NumPy); las secuencias básicas no las soportan.