El verdadero potencial de la desestructuración se revela al combinarla con la sintaxis rest, que permite agrupar los elementos restantes durante el proceso de desestructuración 📦
Por ejemplo, puedes descomponer una lista en el primer elemento y todos los demás:
fruit = ['apple', 'orange', 'banana', 'pineapple']
# Separamos el primer elemento y los elementos restantes
first, *rest = fruit
print(first) # => 'apple'
print(rest) # => ['orange', 'banana', 'pineapple']
La expresión *rest significa que debes tomar todos los elementos que quedan de la desestructuración y colocarlos en una lista llamada rest. Puedes darle a esta lista cualquier nombre. Rest se activa al final, cuando todos los demás datos ya se han descompuesto en sus propias variables. Es por eso que se llama rest (los restantes).
De manera similar, cualquier lista puede descomponerse en un número específico de elementos más el resto de la lista. Rest tiene limitaciones 🚧 No puede aparecer en ningún lugar más que al final de la lista.
# Lista original
fruit = ['apple', 'orange', 'banana', 'pineapple']
head, *tail = fruit
print(head) # => 'apple'
print(tail) # => ['orange', 'banana', 'pineapple']
# Primer, segundo y los elementos restantes
first, second, *rest = fruit
print(first)# => 'apple'
print(second) # => 'orange'
print(rest) # => ['banana', 'pineapple']
# Primer, segundo, tercer y los elementos restantes
first, second, third, *rest = fruit
print(first) # => 'apple'
print(second) # => 'orange'
print(third) # => 'banana'
print(rest) # => ['pineapple']
# Si no hay elementos, entonces rest será una lista vacía
first, second, third, one_more, *rest = fruit
print(first) # => 'apple'
print(second) # => 'orange'
print(third) # => 'banana'
print(one_more) # => 'pineapple'
print(rest) # => []
# Omitiendo un elemento
first, _, third, *rest = fruit
print(first) # => 'apple'
print(third) # => 'banana'
print(rest) # => ['pineapple']
# También puedes desempaquetar elementos en cualquier parte de la lista
# El primero, el último y los elementos centrales restantes
first, *mid, last = fruits
print(first) # => 'apple'
print(last) # => 'pineapple'
print(mid) # => ['orange', 'banana']
En situaciones donde solo nos interesa una parte específica de la lista y los primeros elementos no son relevantes, es preferible utilizar un corte (slice) ✂️
# Lista original
fruits = ['apple', 'orange', 'banana', 'pineapple']
# Un slice de la lista, comenzando con el elemento de índice 1
rest = fruits[1:]
print(rest) # ['orange', 'banana', 'pineapple']
Se puede utilizar la sintaxis rest también para la desestructuración de cadenas.
# Cadena original
string = 'some string'
# Desempaquetando la cadena
first, second, *rest = string
print(first) # => 's'
print(second) # => 'o'
print(rest) # => ['m', 'e', ' ', 's', 't', 'r', 'i', 'n', 'g']
Ten en cuenta que después de empacar la parte restante de la cadena en rest, obtenemos una lista, no una cadena 📜
Conclusiones
La desestructuración en Python permite dividir eficazmente los elementos de las colecciones en variables separadas y recoger los elementos restantes en una lista utilizando la sintaxis *rest. Esto es conveniente para trabajar con datos cuando necesitas separar algunos elementos del resto.
Se puede utilizar la sintaxis *rest para dividir colecciones en un número fijo de elementos iniciales y los restantes. Rest siempre debe estar al final de la lista de desestructuración, y recoge todos los elementos restantes en una nueva lista.
Cuando sólo importa una parte de la lista, es mejor usar los slices, ya que permiten extraer un subconjunto de elementos sin necesidad de desestructuración. Esto puede ser útil si quieres obtener todos los elementos a partir de un determinado índice.
La sintaxis *rest también se aplica a la desestructurización de cadenas, permitiendo extraer los caracteres iniciales y recoger los caracteres restantes en una lista. Esto puede ser útil para el análisis y procesamiento de datos de texto.
Para acceder completo a curso necesitas un plan básico
El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.