Manejo básico de listas
Dado que las listas son las colecciones de datos más simples con que cuenta Python. y que en la [entrada anterior] nos limitamos a presentar y diferenciar las distintas colecciones de datos en este lenguaje, pero no dijimos nada sobre formas de trabajo con ellas, a fin de lograr nuestro objetivo de dar funcionalidad al aprendizaje desde sus inicios, parece necesario que dediquemos esta entrada a aprender cómo se trabaja con las listas, a fin de que podamos aplicar estos conocimientos básicos en ejemplos y ejercicios, pero también al desarrollo de proyectos elementales pero ya de cierta funcionalidad.
vListaDiasSemana = ["lunes","martes","miércoles","jueves","viernes"]
- Se declara y asigna contenido de la misma forma y con el mismo operador que una variable, unificando ambos procesos en una única sentencia.
- El identificador de la lista es su delimitador: los corchetes.
- Los elementos o datos se separan mediante comas.
- Aunque en ésta todos los elementos son del mismo tipo, no es esta una restricción aplicable a las listas en Python.
- Aunque podemos escribir la lista sin más, para poder acceder a ella o a alguno de sus elementos, es necesario asignarla a una variable (vListaDiasSemana)
- Las listas pueden contener 0 elementos o todos los que deseemos.
vPalabra = "casa"vlstPalabras = ["casa","mesa","armario"]print(vPalabra) -> devuelve casaprint(vlstPalabras[0]) -> devuelve casaprint(vlstPalabras) -> devuelve ['casa','mesa','armario']
- Si la lista vlstPalabras estuviera vacía, print(vlstPalabras[0]) provocaría un error (no hay elemento vlstPalabras[0]), no así print(vlstPalabras) -> devuelve [].
print(len(vListaDiasSemana)) -> Devuelve 5vNumDiasSemana=len(vListaDiasSemana)print(vNumDiasSemana) -> Devuelve 5
- Para cambiar un elemento, únicamente tenemos de reasignarle nuevo contenido haciendo uso de su índice; por ejemplo, siendo la lista...
vlstPalabras = ["casa","mesa","armario"]
... si queremos cambiar vlstPalabras[0] "casa" por "cama" diremos...
vlstPalabras[0] = "cama"
- Para añadir un nuevo elemento a una lista utilizaremos la siguiente expresión (el nuevo elemento se añade al final de la lista):
vlstPalabras = vlstPalabras + ["mesita"]
- Para borrar un elemento de la lista (la anterior, por seguir con el ejemplo) usaremos la instrucción del de siguiente modo:
del vlstPalabras[2] -> Borra el elemento "armario" que ocupa la tercera posición.
Podemos trabajar con varias listas, por ejemplo dos, y unirlas en una tercera. Supongamos dos listas:
vlstMuebles1=["mesa","silla","taburete"]
vlstMuebles2=["sofá","armario","mesita"]
... la unión de ambas mediante la instrucción...
vlstMuebles= vlstMuebles1+vlstMuebles2
... nos da como resultado...
print(vlstMuebles) -> Devuelve ['mesa', 'silla', 'taburete', 'sofá', 'armario', 'mesita']
Además de unir dos listas en una tercera, también podemos considerar otras opciones, ya que una lista puede estar formada por una serie de elementos/datos (lista simple), pero también por una combinación de elementos y listas o por una colección de listas. La primera formulación ya la conocemos, tanto en su presentación más sencilla, como resultado de la unión o suma de dos listas; veremos a continuación las otras dos.
- Lista resultante de la unión de una lista con otra mediante inclusión. Sea la lista inicial vlstMuebles1=["mesa","armario"] y queremos modificarla para que esté conformada por la estructura de contenidos Muebles + Muebles de asiento; para ello creamos una segunda lista con muebles de asiento (vlstAsientos=["silla","taburete","sillón","tresillo"]) y la incorporamos como elementos de la lista original:
vlstMuebles=["mesa","armario",vlstAsientos]
... obteniendo como resultado
print(vlstMuebles) -> Devuelve ['mesa', 'armario', ['silla', 'taburete', 'sillón', 'tresillo']]
Obsérvese que lo que alteramos es la estructura de la primera lista, no unimos ambas; de ahí que los elementos de la segunda lista (que ocupa como elemento de la primera la posición 3 (vlstMuebles[2]), aparecen delimitados como lista mediante [ ]. Esto es importante entenderlo, ya que el acceso a los contenidos de esta lista anidada se rigen por su doble posicionamiento: como elementos [2] de la lista principal y como elementos [x] de la lista secundaria. Así, si solicitamos el contenido de la posición [2], obtenemos...
print(vlstMuebles[2]) -> Devuelve ['silla', 'taburete', 'sillón', 'tresillo']
... por lo que si lo que deseamos es obtener el contenido de la posición 2 de la lista anidada (taburete), deberemos referenciarlo indicando ambos índice: el primero como elemento de la lista principal y el segundo de la lista anidada:
print(vlstMuebles[2][1]) -> Devuelve taburete
- Un procedimiento similar se sigue para construir una lista formada por listas (lista de listas). Por ejemplo, supongamos que tenemos un conjunto de listas cuyos elementos representan subconjuntos de un conjunto principal y queremos representar esa pertenencia transformado el conjunto principal en una lista de listas, cuyos elementos son esos subconjuntos.
lstFrutas=["pera","manzana","plátano"]lstLegumbres=["garbanzo","lenteja","haba"]lstHortalizas=["zanahoria","tomate","pimiento"]lstVegetales=[lstFrutas,lstLegumbres,lstHortalizas]
print(lstVegetales) -> Devuelve [['pera', 'manzana', 'plátano'], ['garbanzo', 'lenteja', 'haba'], ['zanahoria', 'tomate', 'pimiento']]
El acceso a un elemento cualquiera de cualquiera de estas tres listas sigue el procedimiento explicado antes. Por ejemplo, para acceder al elemento 2 ([1]) de la lista 3 ([2]), se realiza con las siguiente instrucción:
print(lstVegetales[2][1]) -> Devuelve tomate
El uso de bucles es una estrategia muy frecuente para recorrer los elementos de una lista y permite desarrollar procesos muy interesantes en la construcción de algoritmos. Esto es debido a la posibilidad de combinar el uso de las variables contador en combinación con los índices de las listas. Veamos un ejemplo sencillo:
Supongamos una lista que contiene los nombres de los alumnos, una segunda que contiene sus apellidos y una tercera que contiene las calificaciones en una prueba.
lstNombre=["Julián","Pedro","Matilde", "Ana"]lstApellidos=["Alonso Pérez","González López","Ramírez De Luis","Ordóñez Núñez"]lstNotas=[8,9,7,4]for i in range(4):print(lstNombre[i])print(lstApellidos[i])print(lstNotas[i])
Devuelve
JuliánAlonso Pérez8PedroGonzález López9MatildeRamírez De Luis7AnaOrdóñez Núñez4
Pero en Python también podemos trabajar con el bucle For directamente sobre una lista, lo que simplifica enormemente la formulación de estas estructuras. Un ejemplo sobre una de las listas anteriores. Para ello es suficiente con emplear la expresión for item in NombreLista
lstNombre=["Julián","Pedro","Matilde", "Ana"]for item in lstNombre:print(item,end=" ") -> Devuelve sucesivamente Julián Pedro Matilde Ana
Una expresión similar a la anterior es la que usaremos para saber si un dato concreto forma parte de una lista. Sobre la lista anterior (lstNombre=["Julián","Pedro","Matilde", "Ana"]), para saber si el Carlos forma parte de la lista formularemos la siguiente instrucción: "Carlos " in lstNombre. Esta expresión devuelve un booleano (en este caso False, ya que Carlos no forma parte de lstNombre).
Podemos asociar esta búsqueda a un condicional y en función del resultado generar una bifurcación del algoritmo o, más sencillo, añadir el elemento a la lista de nombres. Para ello primero deberemos asignar el resultado de "Carlos " in lstNombre a una variable:
vBoolA = "Carlos" in lstNombre
if vBoolA==False:
lstNombre=lstNombre+["Carlos"]
print(lstNombre) -> Devuelve ['Julián', 'Pedro', 'Matilde', 'Ana', 'Carlos']
Mucho es aun lo que falta por aprender sobre las listas y su manejo, pero con lo visto ya hemos aprendido lo suficiente para incluirlas en nuestros ejercicios y proyectos.