Python es un lenguaje que tiene algunas propiedades un poco especiales a la hora de tratar con listas o arreglos. Se puede cortar un arreglo desde su inicio hasta determinado lugar, o desde determinado lugar hasta el final.
También se puede cortar desde el inicio hasta -2 elementos, y otras cosas que al principio son confusas pero después son útiles.
Nota: al menos para efectos de este post, lista y arreglo se refieren a lo mismo.
Operaciones slice en Python
Estas operaciones son las cuales involucran una lista y el símbolo de dos puntos :
. De esta manera se pueden cortar listas, así:
lista_cortada = lista[1:3]
Vamos a ver todas las operaciones posibles con esta notación.
Operaciones normales para cortar lista en Python
Para cortar desde inicio hasta fin, se usa esto:
lista[inicio:fin]
Por ejemplo, desde el elemento 0 hasta el 2:
lista[0:2]
Aunque si es cero, no es necesario que se especifique:
lista[:2]
También se puede cortar desde determinado lugar hasta el final:
lista[2:]
Incluso se puede no cortar:
lista[:]
Utilizar números negativos
Aquí se complican un poco las cosas, pero no hay problema. Se pueden usar números negativos para cortar arreglos en Python. Por ejemplo, lo siguiente obtiene el último elemento:
lista[-1:]
Esto es porque comienza en -1, pero como no hay índices negativos, se regresa y entonces se encuentra con el último elemento. Y como ya se encuentra en el fin, no necesita ir más allá.
Igualmente si se quieren obtener los últimos dos elementos:
lista[-2:]
O desde el inicio, pero sin los últimos 2 elementos:
lista[:-2]
Con step o pasos
La notación de slice en Python soporta un tercer “argumento” y es el número de pasos que se avanza al cortar. Por defecto, es 1; pero puede ser especificado de otra manera. Dicho de otro modo, cuando hacemos esto:
lista[0:5]
(obtiene desde el 0 hasta el 5 -1)
Es lo mismo que hacer esto:
lista[0:5:1]
(obtiene desde el 0 hasta el 5 -1 en pasos de 1)
Pero si cambiamos el tercer argumento, para que sea en pasos de 2:
lista[0:5:2]
Entonces obtiene los elementos del 0 hasta el 5, pero ignorando algunos. Comienza en el 0, y avanza 2 pasos, así que selecciona el que tiene el índice 2. Luego, desde el 2 avanza otros 2 pasos y se encuentra con el índice 4. Si ya no hay más al saltar, entonces se detiene.
La gran diferencia es que cuando ponemos que sea en pasos de 1 y cortamos desde 0 hasta 5, devuelve una lista con 5 elementos. Pero cuando especificamos que vaya en pasos de 2, la devuelve con 3.
Por cierto, se puede observar que para invertir una lista se tiene que avanzar en pasos de -1, seleccionado desde el inicio hasta el fin, así:
lista[::-1]
Esto es explicado en profundidad en otro post que trata sobre cómo invertir un arreglo o lista en Python.
Pingback: Invertir arreglo o lista en Python - Parzibyte's blog