En éste artículo veremos qué son las multilistas en Python, cómo se crean, y cómo crear multilistas en Python usando expresiones generadoras.
Éste artículo está también explicado en video. Encuéntralo aquí:https://youtu.be/sDdaEEh9iGE
En Python almacenamos un dato en una variable de ésta forma:
dato = 5
Se pueden guardar varios elementos en una misma estructura, por ejemplo en una lista, así:
lista = [5,6,7,8]
Observamos que se utilizan corchetes para agrupar los datos, y comas para separarlos.
Una lista puede contener cualquier dato, incluso a otra lista, así (Martelli & Ascher, 2002):
[[1,2,3],[4,5,6],[7,8,9]]
El ejemplo anterior muestra una lista que a su vez contiene tres listas, cada una formada por tres datos numéricos.
Podemos agregar datos a una lista utilizando el método append.
lista = [] lista.append([2,4,6]) lista.append([8,10,12]) print (lista)
Explicación: Se crea una lista vacía (lista = []), y se le agrega una lista (lista.append([2,4,6])). El método append añade un solo elemento al final de la lista, en éste caso ese elemento es una lista con tres valores. En el ejemplo anterior, se tiene una lista que contiene dos listas. Si lo comparásemos al concepto de matrices, sería una matriz de 2 filas y tres columnas.
En el ejemplo anterior se creó la siguiente lista de listas:
[[2,4,6],[8,10,12]]
Si deseamos acceder al primer valor de la primera lista, entonces la instrucción sería:
valor = lista[0][0]
Donde lista[0] ser refiere a la primera lista, por lo que lista[0][0] se refiere al primer elemento de la la multilista.
En el siguiente ejemplo deseamos crear una multilista de 2 filas por 3 columnas:
lista2 = [] for i in range(2): lista2.append([]) for j in range(3): lista2[i].append(0) print (lista2)
Explicación: Creamos una lista vacía (lista2=[ ]), y usamos un for que vaya de 0 al número de filas deseado (for i in range(2)). Dentro del for, agregamos a la lista un elemento que será una lista vacía (lista2.append([ ]), y usamos un for que vaya de 0 al número de columnas deseado (for j in range(3)). Dentro de ese segundo for, agregamos un cero, a la lista que está en el último elemento creado (lista2[i].append(0)).
Usar una expresión generadora nos permite crear listas y generar los valores que irán dentro de ellas de forma sencilla.
Ejemplo de una expresión generadora en Python
iterador = ['Hello' for i in range(3)] print (iterador)
Explicación. El código anterior crea una variable de tipo lista (iterador = [ ) y dentro se utiliza un for (for i in range(3) que va a ir de 0 a 2. A la izquierda de ese for, se especifica el valor que se va a generar, en éste caso dentro de la lista. (‘Hello’). El resultado es una lista con tres valores ‘Hello’.
[‘Hello’, ‘Hello’, ‘Hello’]
print ([i for i in range(6) ])
Explicación. En el ejemplo anterior, se da la orden de imprimir (print) una lista que contiene un for que va de 0 a 5 (for in range(6)). A la izquierda del for, se especifica el valor que se va a generar i, dentro de la lista.
El siguiente código crea una multilista de 2 por 3, rellenándola de ceros.
lista3 = [[0 for col in range(3)] for row in range(2)] print (lista3)
Explicación. Se crea una lista (lista3 = [ …] ) que contendrá un for que va de 0 a 1, dando dos iteraciones. A la izquierda de ese for va el elemento que se va a generar dentro de la lista, y que es… una lista. Dentro de esa segunda lista va otro for que ira de 0 a 2, dando tres iteraciones. A la izquierda de ese for va el valor que se va a generar dentro de esa lista, un cero). El resultado: Se generan dos listas, y dentro de cada una de ellas se generan tres ceros.
Ejemplo de lista de listas en Python: el usuario determina las dimensiones
Considere el siguiente problema:
Escriba un programa que tome 2 dígitos X,Y como entrada y genere una multilista de X por Y donde el valor de cada elemento sea el número de fila
Una entrada sería:
3,3
La salida de sería
[[0,0,0],[1,1,1],[2,2,2]]
Solución:
input_str = input("Dos numeros separados por coma") dimension=[int(x) for x in input_str.split(',')] rowNum=dimension[0] colNum=dimension[1] multilista = [[row for col in range(colNum)] for row in range(rowNum)] print (multilista)
Explicación. Se pide al usuario dos números separados por comas (input (“Dos números separados por comas: “)) y se guarda la cadena que el usuario escribe en una variable (input_str = ). Se usa una expresión generadora para separar los valores y guardarlos como enteros en una lista. Ésto se logra haciendo lo siguiente: se crea una variable llamada dimension que en realidad es una lista (dimension = ) y dentro de los corchetes se convierte a lista la cadena que el usuario introdujo (input_str.split(‘,’)). Como ahora es una lista, se puede recorrer utilizando for (for x in input_str.split(‘,’). A la izquierda de ese for se indica el elemento que se va a generar dentro de la lista (int(x)), que es el valor de x, convertido a entero. Cada uno de los valores de la lista, se guardan en variables separadas (rowNum = dimension[0]). Y se utilizan esas variables para crear una multilista. Para que el elemento generado sea el valor de la fila, se utiliza row.
Éste código lo puedes encontrar explicado en video. Te lo dejo a continuación: