Intercambiando elementos en las listas
Intercambio de variables
El problema que vamos a resolver es el siguiente: ¿Cómo se pueden intercambiar los valores de dos variables?
Echa un vistazo al fragmento:
variable_1 = 1
variable_2 = 2
variable_2 = variable_1
variable_1 = variable_2
Esto es incorrecto, porque perderemos el valor almacenado en variable_2. Necesitamos una tercera variable que sirva como almacenamiento auxiliar. El código sería de esta manera:
variable_1 = 1
variable_2 = 2
auxiliar = variable_1
variable_1 = variable_2
variable_2 = auxiliar
Pero Python nos permite una solución que funciona también y es muy clara:
variable_1 = 1
variable_2 = 2
variable_1, variable_2 = variable_2, variable_1
Intercambio de los elementos de una lista
Vamos a utilizar lo visto en el punto anterior para resolver el siguiente problema: queremos invertir el orden de una lista. Es decir, por ejemplo en una lista de 5 elementos, queremos intercambiar el primer elemento por el último y el segundo por el cuarto.
Usando lo aprendido en el aparatado anterior, el código sería:
my_list = [10, 1, 8, 3, 5]
my_list[0], my_list[4] = my_list[4], my_list[0]
my_list[1], my_list[3] = my_list[3], my_list[1]
print(my_list)
Pero, y si tuviéramos una lista con muchos elementos?. ¿Sería esta solución válida?. Podríamos utilizar el bucle for para recorrer la lista e ir haciendo los intercambios, el código quedaría:
my_list = [10, 1, 8, 3, 5]
length = len(my_list)
for i in range(length // 2):
my_list[i], my_list[length - i - 1] = my_list[length - i - 1], my_list[i]
print(my_list)
- Hemos asignado la variable
lengtha la longitud de la lista actual (esto hace que nuestro código sea un poco más claro y más corto). - Hemos preparado el bucle for para que se ejecute su cuerpo
length // 2veces (esto funciona bien para listas con longitudes pares e impares, porque cuando la lista contiene un número impar de elementos, el del medio permanece intacto). - Hemos intercambiado el elemento
i(desde el principio de la lista) por el que tiene un índice igual alength-i-1(desde el final de la lista); en nuestro ejemplo:- En la primera iteración:
i = 0ylength-i-1 = 4. - En la segunda iteración:
i = 1ylength-i-1 = 3.
- En la primera iteración: