El poder de la notación de segmentos en Python

En Sophilabs tenemos mucha experiencia trabajando con Python y Django. Hoy exploraremos más a fondo la versatilidad de la notación de segmentos. Es una función importante que puede ayudarte a lograr rapidez y legibilidad en tu código, como mostraremos a continuación.
Empecemos...
¿Qué hace la notación de segmentos?
La notación de segmentos es una función integrada de Python que permite acceder a partes de cualquier cadena, lista o tupla. Incluso puedes modificar o eliminar los elementos de secuencias mutables, como las listas.
Por ejemplo, veamos cómo funciona con una lista llamada my_list:
# [0,1,2,3,4,5,6,7,8,9]
my_list = range(10)
# would make a copy of all the list [0,1,2,3,4,5,6,7,8,9]
my_list[:]
# a copy from the start position through the rest of the list
my_list[start:]
# eg. my_list[1:] => [1,2,3,4,5,6,7,8,9]
# a copy from the beginning through stop -1
my_list[:stop]
# eg. my_list[:1] => [0]
# a copy from the start position through stop -1
my_list[start:stop]
# eg. my_list[1:8] => [1,2,3,4,5,6,7]
La sintaxis completa incluye una opción de paso: eg. my_list[start:stop:step]. Puedes usarla si quieres saltar valores. Si se omite el paso en la declaración, su valor predeterminado es 1.
Este concepto puede ir más allá cuando la sintaxis usa la notación extendida:
# this will generate a new copy skipping the elements by the value of the step
my_list[::step]
# eg. my_list[::2] => [0,2,4,6,8]
Uso de valores negativos
Una de las grandes ventajas de Python es que permite usar valores negativos como índices, y la notación de segmentos no es una excepción.
Volvamos al último ejemplo:
# will return the last element of the list
my_list[-value]
# eg. my_list[-2] => 8
# The last start elements of the list
my_list[-start:]
# eg. my_list[-2:] => [8, 9]
# will return everything except last stop elements of the list
my_list[:-stop]
# eg. my_list[:-2] => [0,1,2,3,4,5,6,7]
De forma similar, con la versión extendida que utiliza pasos, puedes devolver una nueva lista en orden inverso usando valores negativos en la opción de paso:
my_list[::-step]
# eg. my_list[::-1] => [9,8,7,6,5,4,3,2,1,0]
# eg. my_list[::-2] => [9,7,5,3,1]
Esto significa que podemos hacer combinaciones muy flexibles que alteran el orden de la lista. Además, podemos generar fácilmente nuevas estructuras con la notación de segmentos, haciendo que el código sea más versátil y legible.
Relación con el objeto Slice()
my_list[start:stop:step] is equivalent to my_list[slice(start, stop, step)]
Para omitir cualquier argumento, en slice() debe usarse None. Por ejemplo:
# eg. my_list[::-2] => my_list[slice(None, None, -2)]
Hemos aplicado la notación de segmentos de varias maneras y, como puedes ver, es una herramienta muy potente. Exploramos algunos conceptos básicos, pero esto es solo la punta del iceberg: úsala en tus proyectos y descubre todo el potencial de esta función.