Listas. Manejo básico
Las listas son las colecciones nativas de datos más simples y flexibles con las que cuenta Python, lo que hace que sean usadas con mucha frecuencia.
Las listas son las colecciones nativas de datos más simples y flexibles con las que cuenta Python, lo que hace que sean usadas con mucha frecuencia.
Lista como iterable
Ya hemos tenido ocasión de comprobar la utilidad que tiene el uso de un array como iterable en la automatización de procedimientos cuando trabajamos con OOo Basic. Uno de esos iterables en Python son las listas, de ahí el interés por saber iterar por ellas.
De hecho la iteración se presenta en Python más sencilla y a la vez más variada en cuanto procedimiento; y también más potente. Trataremos en esta entrada sobre las diferentes formar de iterar por una lista... y algo más.
Partiendo de la estructura for como instrucción básica para la iteración, la forma más sencilla de iterar es tomar como referente el elemento y como iterable la lista. Así, dada una lista (vg. los curso de E. Primaria)...
cursos = ['P1','P2','P3','P4','P5','P6']
... podemos recorrer la lista del siguiente modo:
for curso in cursos:
print(curso)
Otra forma de iterar es obtener el número de elementos de la lista mediante la función len() y usar la variable asociada (o la misma expresión) como límite superior del recorrido a realizar (1):
n = len(cursos)
for i in range (n):
print(cursos[i])
En ocasiones nos puede venir bien recuperar a la vez el dato y el índice que, como elemento, ocupa en la lista. Para estos casos disponemos de un método específico:
for index, curso in enumerate (cursos):
print(index, curso)
Otra situación especial, que no podemos contemplar como específica en OOo Basic, aunque podemos simularla de otro modo, es cuando disponemos de dos o más listas y deseamos iterar por ambas, simultaneándolas:
cursos = ['P1','P2','P3','P4','P5','P6']
intervalos = ['2000/2001','2001/2002','2002/2003','2003/2004','2005/2006','2006/2007']
for curso, intervalo in zip(cursos, intervalos):
print(intervalo, curso)
Finalmente también podemos iterar secuencialmente (2) por dos o más listas. Para ello primero importamos el módulo itertools y después usamos el método itertools.chain(), como vemos en este ejemplo:
import itertools
for item in itertools.chain(cursos, intervalos):
print(item)
A partir de aquí ya podemos utilizar las listas para automatizar procedimiento al mismo nivel que hacemos en OOo Basic, sólo de con mayor facilidad y potencia.
NOTAS
Modificar el contenido de una lista
Trataremos en esta entrada cómo modificar los elementos que componen una lista mediante diferentes funciones y procedimientos completando lo visto en entradas anteriores, especialmente [en esta] cerrando una temática que lleva abierta desde hace tiempo.
Una vez definida una lista vacía (lista_1 = []) (1) tenemos dos funciones para añadir elementos:
Añadir elementos al final (append())
lista_1.append('Rosa')
Añadir elementos en una posición intermedia (insert(indice,elemento))
lista_1.insert(1,'Cecilia')
Observa que para añadir elementos en una posición determinada debemos indicar como primer parámetro el índice (o posición) que deseemos que ocupe el elemento.
Si lo que deseamos es añadir un conjunto de elementos a la lista, todos a la vez, usaremos la función (extend([]))
lista_1.extend(['Maria','Celia'])
En realidad lo que añadimos es una lista a la lista anterior, motivo por el cual situamos los elementos entre corchete. De no hacerlo obtendremos error o un resultado inesperado (2)
También contamos con funciones para borrar o eliminar elementos de la lista:
Eliminamos el elemento identificado de la lista mediante (remove())
lista_1.remove('Rosa')
El método (pop()) elimina por defecto el último elemento de la lista...
lista_1-pop()
... pero si le pasamos como parámetro un índice válido de la lista elimina el elemento que ocupe esa posición
lista_1.pop(2)
Pero el método más simple para borrar un elemento es usar la instrucción del
del lista_1[0]
NOTAS
Supongamos entonces la siguiente situación:
fecha = input("Dime la fecha (dd/mm/aaa)")
fecha_date= datetime.strptime(fecha,'%d/%m/%Y')
...observa que en el parámetro formato utilizo el mismo que he pedido en input()
Caso 2. Acceder a los componentes de la fecha.
Este acceso es la base para realizar manipulaciones y cálculos de diferente tipo. Partiendo de la trasformación anterior (variable fecha_date) es suficiente con aplicar los siguientes instrucciones:
Caso 3. Conocer el día y la hora actuales.año = fecha_date.year
mes = fecha_date.month
dia = fecha_date.day
hoy = date.today()ahora = datetime.now()
Supongamos el siguiente texto asignado a la variable:
texto = "Una narración breve en prosa es un texto corto que cuenta una historia usando el lenguaje no métrico o rítmico, y que puede ser un cuento, un microrrelato o una fábula\n. Estas formas literarias se caracterizan por su concisión y la condensación de eventos en un formato limitado, buscando captar la atención del lector mediante la intensidad de la historia, un final inesperado o una enseñanza moral."
i = 0for i in range(n_pal):print(lista1[i])
i = 0texto_1 = ""for i in range(n_pal):texto_1 = texto_1 + lista1[i] + ' 'print(texto_1)
El núcleo de este procedimiento es la asignación recursiva del contenido de la lista sobre la variable contenedora (texto_1 = texto_1 + lista1[i] + ' ')
La segunda fórmula se basa en el uso de la función join() que nos ahorra el bucle y cuya sintaxis es la siguiente...
variable_de_asignación_de_cadena = "separador".join(lista)
texto1 = ""
texto1 = " | ".join(lista1)
print(texto1)
import ezodf# Lectura del archivo ODSdocumento = ezodf.opendoc('AlumLS.ods')#Acceso a la hoja Datos 1 (la segunda, en este caso)hoja_datos = documento.sheets[1]#Acceso a la celda A1celdaA1 = hoja_datos['A1'].value#Mostrar contenido de la celdaprint(celdaA1)