Estructuras de Python:
Listas
Las listas permiten almacenar objetos mediante un orden definido y con
posibilidad de duplicados. Las listas son estructuras de datos mutables, lo que
significa que podemos añadir, eliminar o modificar sus elementos.
Crear listas
Una lista está compuesta por cero o más elementos. En Python debemos escribir estos
elementos separados por comas y dentro de corchetes.
Ejemplos de listas:
list = []
programas = ['Python' , 'Ruby' , 'Javascript' ]
serief = [0, 1, 1, 2, 3, 5, 8, 13]
datos = ['Tenerife', {'cielo': 'limpio', 'temp': 24}, 3718, (28.2933947, -16.5226597)]
print(list)
print(programas)
print(serief)
print(datos)
Nota: Una lista puede contener tipos de datos heterogéneos, lo que la hace una
Estructura
Conversión
Para convertir otros tipos de datos en una lista podemos usar la función list():
# conversión desde una cadena de texto
lista = list('Python')
print(lista)
Si nos fijamos en lo que ha pasado, al convertir la cadena de texto Python se ha creado
una lista con 6 elementos, donde cada uno de ellos representa un caracter de la cadena.
Podemos extender este comportamiento a cualquier otro tipo de datos que permita ser
iterado (iterables).
Lista vacía
Existe una manera particular de usar list() y es no pasarle ningún argumento. En este caso
estaremos queriendo convertir el «vacío» en una lista, con lo que obtendremos una lista
vacía:
# lista vacia
lista = list()
print(lista)
Operaciones con listas
Obtener un elemento Igual que en el caso de las cadenas de texto, podemos obtener un
elemento de una lista a través del índice (lugar) que ocupa.
Ejemplo:
tienda = [ 'Agua' , 'Huevos' , 'Aceite' ]
print(tienda[0])
print(tienda[1])
print(tienda[2])
print(tienda[-1]) # acceso con índice negativo
El índice que usemos para acceder a los elementos de una lista tiene que estar
comprendido entre los límites de esta. Si usamos un índice antes del comienzo o después
del final obtendremos un error (excepción):
tienda = [ 'Agua' , 'Huevos' , 'Aceite' ]
print(tienda[3])
Traceback (most recent call last):
File "<string>", line 2, in <module>
IndexError: list index out of range
tienda = [ 'Agua' , 'Huevos' , 'Aceite' ]
print(tienda[-5])
Traceback (most recent call last):
File "<string>", line 2, in <module>
IndexError: list index out of range
Trocear una lista
El troceado de listas funciona de manera similar al troceado de cadenas.
Ejemplo:
tienda = [ 'Agua' , 'Huevos' , 'Aceite' , 'Sal' ,
'Limón' ]
print(tienda[0:3])
print(tienda[:3])
print(tienda[2:4])
tienda = [ 'Agua' , 'Huevos' , 'Aceite' , 'Sal' ,
'Limón' ]
# Equivale a invertir la lista
print(tienda[::-1])
En el troceado de listas, a diferencia de lo que ocurre al obtener elementos, no debemos
preocuparnos por acceder a índices inválidos (fuera de rango) ya que Python los
restringirá a los límites de la lista:
tienda = [ 'Agua' , 'Huevos' , 'Aceite' , 'Sal' ,
'Limón' ]
print(tienda[10:])
print(tienda[-100:2])
print(tienda[2:100])
[]
['Agua', 'Huevos']
['Aceite', 'Sal', 'Limón']
>
Ninguna de las operaciones anteriores modifica la lista original, simplemente devuelven
una lista nueva.
Invertir una lista
Python nos ofrece, al menos, tres mecanismos para invertir los elementos de una lista:
Conservando la lista original: Mediante troceado de listas con step negativo:
tienda = [ 'Agua' , 'Huevos' , 'Aceite' , 'Sal' ,
'Limón']
print(tienda[::-1])
Conservando la lista original: Mediante la función reversed():
tienda = [ 'Agua' , 'Huevos' , 'Aceite' , 'Sal' ,
'Limón']
print(list(reversed(tienda)))
Modificando la lista original: Utilizando la función reverse() (nótese que es sin «d» al final):
tienda = [ 'Agua' , 'Huevos' , 'Aceite' , 'Sal' ,
'Limón']
[Link]()
print(tienda)
Añadir al final de la lista
Una de las operaciones más utilizadas en listas es añadir elementos al final de estas. Para
ello Python nos ofrece la función append(). Se trata de un método destructivo que
modifica la lista original:
tienda = [ 'Agua' , 'Huevos' , 'Aceite' , 'Sal' ,
'Limón']
[Link]( 'Atún' )
print(tienda)
Creando desde vacío
Una forma muy habitual de trabajar con listas es empezar con una vacía e ir añadiendo
elementos poco a poco. Se podría hablar de un patrón creación. Supongamos un ejemplo
en el que queremos construir una lista con los números pares del 1 al 20:
numeros = []
for i in range(20):
if i % 2 == 0:
[Link](i)
print(numeros)
Añadir en cualquier posición de una lista
En Python ofrece una función insert() que vendría a ser una generalización de la anterior,
para incorporar elementos en cualquier posición. Simplemente debemos especificar el
índice de inserción y el elemento en cuestión. También se trata de una función destructiva
2:
tienda = [ 'Agua' , 'Huevos' , 'Aceite' , 'Sal' ,
'Limón']
[Link](1,'Jamón')
print(tienda)
tienda = [ 'Agua' , 'Huevos' , 'Aceite' , 'Sal' ,
'Limón']
[Link](3,'Jamón')
print(tienda)
El índice que especificamos en la función insert() lo podemos intepretar como la posición
delante (a la izquierda) de la cual vamos a colocar el nuevo valor en la lista.
Al igual que ocurría con el troceado de listas, en este tipo de inserciones no obtendremos
un error si especificamos índices fuera de los límites de la lista. Estos se ajustarán al
principio o al final en función del valor que indiquemos:
tienda = [ 'Agua' , 'Huevos' , 'Aceite' , 'Sal' ,
'Limón']
[Link](100, 'Mermelada' )
print(tienda)
Aunque es posible utilizar insert() para añadir elementos al final de una lista, siempre se
recomienda usar append() por su mayor legibilidad:
values = [1, 2, 3]
[Link](4)
print(values)
Repetir elementos Al igual que con las cadenas de texto, el operador * nos permite repetir
los elementos de una lista:
tienda = [ 'Agua' , 'Huevos' , 'Aceite' ]
tienda = tienda * 3
print(tienda)
Combinar listas Python nos ofrece dos aproximaciones para combinar listas: Conservando
la lista original: Mediante el operador + o +=:
lista1 = [ 'Agua' , 'Huevos' , 'Aceite' ]
lista2 = [ 'Naranja' , 'Manzana' , 'Piña' ]
lista3 = lista1 + lista2
print(lista3)
Modificando la lista original: Mediante la función extend():
lista1 = [ 'Agua' , 'Huevos' , 'Aceite' ]
lista2 = [ 'Naranja' , 'Manzana' , 'Piña' ]
[Link](lista2)
print(lista1)
Hay que tener en cuenta que extend() funciona adecuadamente si pasamos una lista
como argumento. En otro caso, quizás los resultados no sean los esperados. Veamos un
ejemplo:
lista = ['Agua' , 'Huevos' , 'Aceite' ]
[Link]( 'Limón')
print(lista)
['Agua', 'Huevos', 'Aceite', 'L', 'i', 'm', 'ó', 'n']
El motivo es que extend() «recorre» (o itera) sobre cada uno de los elementos del objeto
en cuestión. En el caso anterior, al ser una cadena de texto, está formada por caracteres.
De ahí el resultado que obtenemos. Se podría pensar en el uso de append() para combinar
listas. La realidad es que no funciona exactamente como esperamos; la segunda lista se
añadiría como una sublista de la principal:
lista1 = [ 'Agua' , 'Huevos' , 'Aceite' ]
lista2 = [ 'Naranja' , 'Manzana' , 'Piña' ]
[Link](lista2)
print(lista1)
['Agua', 'Huevos', 'Aceite', ['Naranja', 'Manzana', 'Piña']]
Si se requiere mostrar la información de la sublista que se agrego a lista1, se dice la
posición de la lista1 y la posición dentro de la sublista:
lista1 = [ 'Agua' , 'Huevos' , 'Aceite' ]
lista2 = [ 'Naranja' , 'Manzana' , 'Piña' ]
[Link](lista2)
print(lista1)
print(lista1[3][0])
['Agua', 'Huevos', 'Aceite', ['Naranja', 'Manzana', 'Piña']]
Naranja
Explicación:
En la lista1 la sublista se encuentra en la posición 3 y en esa posición se encuentra una
sublista y en la posición 0 se encuentra almacenado la frase Naranja.
Modificar una lista
Del mismo modo que se accede a un elemento utilizando su índice, también podemos
modificarlo:
lista1 = [ 'Agua' , 'Huevos' , 'Aceite' ]
print(lista1)
print(lista1[0])
lista1[0]= 'Cebolla' #se cambia el valor almacenado en la posición 0
print(lista1)
Resultado
['Agua', 'Huevos', 'Aceite']
Agua
['Cebolla', 'Huevos', 'Aceite']
lista1 = [ 'Agua' , 'Huevos' , 'Aceite' ]
lista2 = [ 'Naranja' , 'Manzana' , 'Piña' ]
[Link](lista2)
print(lista1)
print(lista1[3][0])
lista1[3][0] = 'Mango' #se cambia la palabra naranja por mango
print(lista1)
Resultado
['Agua', 'Huevos', 'Aceite', ['Naranja', 'Manzana', 'Piña']]
Naranja
['Agua', 'Huevos', 'Aceite', ['Mango', 'Manzana', 'Piña']]
lista = ['Agua' , 'Huevos' , 'Aceite' , 'Sal' , 'Limón']
print(lista)
print(lista[1:4])
lista[1:4] = [ 'Atún' , 'Pasta' ] #cambia lo que esta en la posición 1 al 3 por atún y
pasta
print(lista)
Resultado
['Agua', 'Huevos', 'Aceite', 'Sal', 'Limón']
['Huevos', 'Aceite', 'Sal']
['Agua', 'Atún', 'Pasta', 'Limón']
La lista que se asigna no necesariamente debe tener la misma longitud que el rango que
se sustituye.
Borrar elementos:
Python nos ofrece, al menos, cuatro formas para borrar elementos en una lista: Por su
índice: Mediante la función del():
lista = ['Agua' , 'Huevos' , 'Aceite' , 'Sal' , 'Limón']
print(lista)
del(lista[3]) #el elemento sal lo elimina
print(lista)
Resultado
['Agua', 'Huevos', 'Aceite', 'Sal', 'Limón']
['Agua', 'Huevos', 'Aceite', 'Limón']
Por su valor:
Mediante la función remove():
lista = ['Agua' , 'Huevos' , 'Aceite' , 'Sal' , 'Limón']
print(lista)
[Link]('Sal') #el elemento sal lo elimina
print(lista)
Resultado
['Agua', 'Huevos', 'Aceite', 'Sal', 'Limón']
['Agua', 'Huevos', 'Aceite', 'Limón']
Si existen valores duplicados, la función remove() sólo borrará el primero que encuentre.
Por su índice (con extracción):
Las dos funciones anteriores del() y remove() efectivamente borran el elemento indicado
de la lista, pero no «devuelven nada. Sin embargo, Python nos ofrece la función pop() que
además de borrar, nos «recupera» el elemento; algo así como una extracción:
lista = ['Agua' , 'Huevos' , 'Aceite' , 'Sal' , 'Limón']
print(lista)
frase=[Link]() #elimina la ultima
print("frase: ",frase)
print(lista)
frase=[Link](2) #elimina la que se encuentra en la posicion 2
print("frase 2: ",frase)
print(lista)
Resultado
['Agua', 'Huevos', 'Aceite', 'Sal', 'Limón']
frase: Limón
['Agua', 'Huevos', 'Aceite', 'Sal']
frase 2: Aceite
['Agua', 'Huevos', 'Sal']
Si usamos la función pop() Sin pasarle ningún argumento, por defecto usará el índice -1, es
decir, el último elemento de la lista. Pero también podemos indicarle el índice del
elemento a extraer.
Por su rango: Mediante troceado de listas:
lista = ['Agua' , 'Huevos' , 'Aceite' , 'Sal' , 'Limón']
print(lista)
lista[1:4] = []
print(lista)
Resultado
['Agua', 'Huevos', 'Aceite', 'Sal', 'Limón']
['Agua', 'Limón']
Borrado completo de la lista
Python nos ofrece, al menos, dos formas para borrar una lista por completo:
Utilizando la función clear():
lista = ['Agua' , 'Huevos' , 'Aceite' , 'Sal' , 'Limón']
print(lista)
[Link]()
print("lista vacia: ",lista)
Inicializar una lista en vacío con []:
lista = ['Agua' , 'Huevos' , 'Aceite' , 'Sal' , 'Limón']
print(lista)
lista = []
print("lista vacia: ",lista)
Resultado:
['Agua', 'Huevos', 'Aceite', 'Sal', 'Limón']
lista vacia: []
Buscar un elemento
operacion = [ '+' , '-' , '*' , '/']
print(operacion)
print('+' in operacion)
El operador in siempre devuelve un valor booleano, es decir, verdadero o falso.
Número de ocurrencias
Para contar cuántas veces aparece un determinado valor dentro de una lista podemos
usar la función count():
operacion = [ '+' , '-' , '*' , '/', '+']
print(operacion)
print("Se repite",[Link]('+')," veces")
print("Se repite",[Link]('p')," veces")
['+', '-', '*', '/', '+']
Se repite 2 veces
Se repite 0 veces
Convertir lista a cadena de texto Dada una lista, podemos convertirla a una cadena de
texto, uniendo todos sus elementos mediante algún separador. Para ello hacemos uso de
la función join() con la siguiente estructura:
‘separador’.join(lista)
Los separadores pueden ser :
1) , (coma)
2) =
3) Espacio en blanco
lista = [ 'JUNIOR ' , 'TU' , 'PAPA']
print(lista)
union = ' '.join(lista)
print(union)
['JUNIOR ', 'TU', 'PAPA']
JUNIOR TU PAPA
Ordenar una lista
Python proporciona, al menos, dos formas de ordenar los elementos de una lista:
Conservando lista original: Mediante la función sorted() que devuelve una nueva lista
ordenada:
lista = [1, -10, -20,25,12]
print(sorted(lista))
print("lista Original: ",lista)
Resultado
[-20, -10, 1, 12, 25]
lista Original: [1, -10, -20, 25, 12]
Modificando la lista original: Mediante la función sort():
lista = [1, -10, -20,25,12]
print("Lista original: ",lista)
[Link]()
print("Lista ordenada: ",lista)
Resultado
Lista original: [1, -10, -20, 25, 12]
Lista ordenada: [-20, -10, 1, 12, 25]
Ambos métodos admiten un parámetro «booleano» reverse para indicar si queremos que
la ordenación se haga en sentido inverso:
lista = [1, -10, -20,25,12]
print("Lista ordenada ",sorted(lista,reverse=True))
print("lista Original: ",lista)
Resultado
Lista ordenada [25, 12, 1, -10, -20]
lista Original: [1, -10, -20, 25, 12]
lista = [1, -10, -20,25,12]
print("Lista ordenada ",sorted(lista,reverse=True))
print("lista Original: ",lista)
lista=sorted(lista,reverse=True)
print("lista ordenada: ",lista)
Resultado
Lista ordenada [25, 12, 1, -10, -20]
lista Original: [1, -10, -20, 25, 12]
lista ordenada: [25, 12, 1, -10, -20]
lista = [1, -10, -20,25,12]
print("Lista original: ",lista)
[Link]()
print("Lista ordenada: ",lista)
[Link](reverse=True)
print("Lista ordenada invertida: ",lista)
Resultado:
Lista original: [1, -10, -20, 25, 12]
Lista ordenada: [-20, -10, 1, 12, 25]
Lista ordenada invertida: [25, 12, 1, -10, -20]
Longitud de una lista
Podemos conocer el número de elementos que tiene una lista con la función len():
lista = [1, -10, -20,25,12]
print("Longitud de la lista: ",len(lista))
Iterar sobre una lista
Al igual que hemos visto con las cadenas de texto, también podemos iterar sobre los
elementos de una lista utilizando la sentencia for:
lista = [1, -10, -20,25,12]
for n in lista:
print(n)
Resultado
-10
-20
25
12
Iterar usando enumeración
Hay veces que no sólo nos interesa «mostrar» cada uno de los elementos de una lista, sino
que también queremos saber su índice dentro de la misma. Para ello Python nos ofrece la
función enumerate():
lista = [ 'Agua' , 'Huevos' , 'Aceite' , 'Sal' , 'Limón' ]
for i, p in enumerate(lista):
print(i, p)
Resultado
1 Huevos
2 Aceite
3 Sal
4 Limón
Iterar sobre múltiples listas
Python ofrece la posibilidad de iterar sobre múltiples listas en paralelo utilizando la
función zip():
lista1 = [ 'Agua' , 'Aceite' , 'Arroz' ]
lista2 = [ 'mineral natural' , 'de oliva virgen' , 'basmati' ]
for producto, detalle in zip(lista1, lista2):
print(producto, detalle)
Resultado
Agua mineral natural
Aceite de oliva virgen
Arroz basmati
Nota: En el caso de que las listas no tengan la misma longitud, la función zip() realiza la
combinación hasta que se agota la lista más corta.
Dado que zip() produce un iterador, si queremos obtener una lista explícita con la
combinación en paralelo de las listas, debemos construir dicha lista de la siguiente
manera:
lista1 = [ 'Agua' , 'Aceite' , 'Arroz' ]
lista2 = [ 'mineral natural' , 'de oliva virgen' , 'basmati' ]
print("Muestra las dos listas: ",list(zip(lista1, lista2)))
lista3 = list(zip(lista1, lista2))
print("Lista 3: ",lista3)
print("Lista 3 [0][0]: ",lista3[0][0])
Resultado
Muestra las dos listas: [('Agua', 'mineral natural'), ('Aceite', 'de oliva virgen'),
('Arroz', 'basmati')]
Lista 3: [('Agua', 'mineral natural'), ('Aceite', 'de oliva virgen'), ('Arroz', 'basmati')]
Lista 3 [0][0]: Agua