Semana 6: Listas y Tuplas#
from IPython.display import YouTubeVideo
YouTubeVideo('9vUkxV9OLS0')
6.1. Listas#
Una lista en Python es una estructura de datos formada por una secuencia ordenada de objetos. Los elementos de una lista pueden accederse mediante su índice, siendo 0 el índice del primer elemento. Su caracteristica principal es el uso de corchetes cuadrados ([ ]).
Referencia de Python sobre Listas
#Se define una lista asignando a una variable valores dentro de corchetes
lista = [] #Lista vacia
print(lista)
[]
#Con la función type podemos ver que las listas son un nuvo tipo de dato-estructura
type(lista)
list
#Print nos permite ver los valores asignados a la lista
#En este caso muestra solo los corchetes, pues está vacía
print(lista)
[]
#Se puede definir una lista con valores de diversos tipos: enteros, de punto
# flotante y cadenas de caracteres.
lista = [23,5,6,"ocho",9,10.45]
type(lista)
list
# Las listas pueden almacenar incluso otras listas.
lista = [1,2.7,3,4,"Hola",[1,2,3]]
print(lista)
[1, 2.7, 3, 4, 'Hola', [1, 2, 3]]
# Con el módulo append se puede agregar un elemento a la lista. Se agrega al final.
lista.append(7) #Agregar elemento al final de la lista
print(lista)
[1, 2.7, 3, 4, 'Hola', [1, 2, 3], 7]
#Se puede agregar con append incluso una nueva lista.
lista.append([12,1,0])
lista
[1, 2.7, 3, 4, 'Hola', [1, 2, 3], 7, [12, 1, 0]]
#append recibe un solo argumento, por lo que entregar tres valores arroja error.
#lista.append(12,1,0)
lista
[1, 2.7, 3, 4, 'Hola', [1, 2, 3], 7, [12, 1, 0]]
Indexado#
Para acceder a los valores almacenados en una lista, es posible sabiendo que una vez dentro de la estructura, se les asigna por defecto un índice que va desde el cero.
print(lista[4], lista[-7])
Hola 2.7
# También se puede acceder a un valor usando índices negativos, iniciando
# en el último, cuyo índice es -1
lista[-2]
7
#Es posible acceder a varios valores simultáneamente.
#Para ello, se especifica un intervalo de índices [a,b). Incluye el valor a, pero no
# el b. Así que realmente serían los índices desde el a hasta el b-1
# La sintaxis es esoecificarlo dentro de corchetes, separado con dos puntos: [a:b]
lista[1:5]
[2.7, 3, 4, 'Hola']
# Si no se especifica el índice final, toma todos los índices hasta el final.
lista[6:]
[7, [12, 1, 0]]
# También podemos definir el tamaño del paso usando la sintaxis.
# [inicio:final:paso](el valor por defecto del paso es 1)
print(lista[1:8:4])
[2.7, [1, 2, 3]]
#Si no se especficia ni el inicio ni el final, toma todos los índices
# de acuerdo al paso que se le entregó.
lista[::2]
[1, 3, 'Hola', 7]
Para acceder a una lista definida dentro de otra, se usa una sintaxis de doble corchete, uno por cada lista. Lista[][]. Donde el primer corchete es para la lista externa, y el segundo para la interna. Funciona con el indexado positivo y negativo.
#Ver los elementos de una lista dentro de otra lista
print(lista[5][1])
# ¿Cómo sería usando la otra forma del indexado?
print(lista[-3][1])
2
2
Organizando listas#
Es posible organizar los valores contenidos dentro de las listas en orden ascendente o descendente. Es importante que los valores dentro de la lista sean del mismo tipo, es decir, comparables entre sí.
#lista.sort() #Método para ordenar elementos de la lista
Por ejemplo, si se tiene que los valores dentro de la lista son cadenas de caracteres, la organización será en orden alfabético. Cabe resaltar que al ser python un lenguaje escrito en inglés, hay caracteres que no reconoce y por tanto no organiza. por ejemplo palabras con tildes o la letra ñ.
#Sort organiza los valores dentro de la lista, sin necesidad de tener que
# definir otra o cambiarle el nombre
lista1 = ['barrio','zapato','window','ñoño','árbol']
lista1.sort()
lista1
['barrio', 'window', 'zapato', 'árbol', 'ñoño']
#Si todos los valores son numéricos, los organiza por defecto en orden
# ascendente, es decir, de menor a mayor.
lista2 = [200,1,3659,20,127,-10]
lista2.sort()
lista2
[-10, 1, 20, 127, 200, 3659]
# Si a sort se le entrega el argumento reverse=True, revierte el orden por defecto.
# es decir, entregará los valores organizados de mayor a menor.
lista3 = [200,1,3659,20,127,-10]
lista3.sort(reverse=True)
lista3
[3659, 200, 127, 20, 1, -10]
Conocer el índice de un elemento dentro de la lista#
Es posible conocer el índice de un valor contenido en una lista, usando el módulo .index.
Este entrega el índice en el que se encuentra un valor en la estructura.
# Si quiero conocer en qué posición está el elemento 'Hola'
lista.index('Hola')
4
lista[4]
'Hola'
Reasignación de valores#
Las listas pueden ser modificadas, incluso se pueden cambiar valores con los que se definieron.
# Los valores dentro de una lista pueden ser asignados y reasignados
lista[4] = 5
print(lista[4])
5
print(lista)
[1, 2.7, 3, 4, 5, [1, 2, 3], 7, [12, 1, 0]]
# Se pueden reasignar varios valores al tiempo.
lista[0:3] = [0]
print(lista)
[0, 4, 5, [1, 2, 3], 7, [12, 1, 0]]
Otras funciones#
Es posible manipular listas de diversas formas. A continuación algunas más.
# Con las funciones 'list' y 'range' se puede crear una lista
# con valores entre un valor a, hasta un valor b, con un espaciado c
lista = list(range(1,20,2)) #a=1, b=20, c=1
lista
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
#Invierte el orden de la lista
lista.reverse()
lista
[19, 17, 15, 13, 11, 9, 7, 5, 3, 1]
Nota: Los string son inmutables, al aplicar un método sobre este no cambia el string. A diferencia de los string, las listas son mutables y cada método que se aplique sobre esta modifica la lista.
# Elimina elementos de la lista especificando su índice, no el valor del elemento.
lista.pop(3)
lista
[19, 17, 15, 11, 9, 7, 5, 3, 1]
# Se puede insertar un nuevo elemento en la lista, especificando el elemento y el
# índice
lista.insert(5, 50000) #Inserta el 50000 para que tenga el índice 5
lista
[19, 17, 15, 11, 9, 50000, 7, 5, 3, 1]
#Permite eliminar un elemento de la lista, siempre elimina el primero que se encuentre
# Acá a diferencia de 'pop', elimina el el elemento por su valor, no por su índice
lista.remove(50000)
lista
[19, 17, 15, 11, 9, 7, 5, 3, 1]
#Podemos determinar cuántas veces está un elemento dado en una lista
lista.count(10)
0
lista.count(7)
1
lista.count(14)
0
lista.count('Daniel')
0
# La función 'len' nos permite conocer la cantidad de elementos de una lista.
# si alguno de esos elementos es otra lista, cuenta toda esa lista interna como
# un solo elemento.
len(lista)
9
Operador in
#
Sirve para verificar si un elemento está dentro de una lista, string, tupla, etc…
'Juan' in lista
False
' Daniel' in lista
False
for i in range(1,10):
print(i)
1
2
3
4
5
6
7
8
9
for i in lista:
print(i+1)
20
18
16
12
10
8
6
4
2
Operaciones con listas#
Las operaciones con las listas son similares a las operaciones realizadas con los strings. En este caso la operación de adición (+) concatena los elementos de las listas. Igualmente, la operación del producto (*) multiplica la lista la cantidad de veces por la que se multiplique.
lista + lista
[19, 17, 15, 11, 9, 7, 5, 3, 1, 19, 17, 15, 11, 9, 7, 5, 3, 1]
lista*3
[19,
17,
15,
11,
9,
7,
5,
3,
1,
19,
17,
15,
11,
9,
7,
5,
3,
1,
19,
17,
15,
11,
9,
7,
5,
3,
1]
lista = [1,2,3,4,5]
lista1 = lista
lista1[0] = 0
lista, lista1
([0, 2, 3, 4, 5], [0, 2, 3, 4, 5])
lista[1] = 1
La realizar la igualdad de dos listas, por ejemplo,
lista1 = lista
No se realiza una copia de la lista como tal, lo que hace python es crear una conexión entre la dirección de memoria en las dos variables. Por lo tanto, al realizar un cambio en una de las listas también se realiza el cambio en la otra lista.
Para asignar una nueva lista a la variable lista1 se debe de realizar una copia de la lista mediante el método .copy()
lista2 = lista.copy()
lista, lista1, lista2
([0, 1, 3, 4, 5], [0, 1, 3, 4, 5], [0, 1, 3, 4, 5])
lista[0] = 1
lista, lista1, lista2
([1, 1, 3, 4, 5], [1, 1, 3, 4, 5], [0, 1, 3, 4, 5])
Listas dentro listas#
lista = [[1,2,3],[4,5,6],[7,8,9]]
lista1 = lista.copy()
lista, lista1
([[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[1, 2, 3], [4, 5, 6], [7, 8, 9]])
lista[0][0] = 0
lista, lista1
([[0, 2, 3], [4, 5, 6], [7, 8, 9]], [[0, 2, 3], [4, 5, 6], [7, 8, 9]])
Ejercicio:
Cree una lista de 4 entradas, donde cada una de ellas sea una lista de 3 entradas.
Acceda a 4 valores de esa lista. Que dicho valor no sea una de las listas interiores, que sea el valor individual.
Reasigne los elementos de la lista con valores, que dichos elementos no sean más listas.
Ordene de mayor a menor dichos elementos.
Ordene de menor a mayor dichos elementos.
Elimine dos elementos de la lista.
Imprima la lista resultante
6.2. Tuplas#
Las tuplas en Python o tuples son muy similares a las listas, pero con dos diferencias. Son inmutables, lo que significa que no pueden ser modificadas una vez declaradas, y en vez de inicializarse con corchetes se hace con (). Dependiendo de lo que queramos hacer, las tuplas pueden ser más rápidas.
Referencia sobre tuplas de Python
Se declara una tupla como sigue
tupla = (1, 2, 3)
print(tupla)
(1, 2, 3)
También se puede hacer sin necesidad de los paréntesis
tupla = 1,2,3
print(tupla)
(1, 2, 3)
lista = [1, tupla]
lista
[1, (1, 2, 3)]
tupla = lista, lista
tupla
([1, (1, 2, 3)], [1, (1, 2, 3)])
Se accede a sus valores con la misma indexación usada para las listas
tupla[1]
[1, (1, 2, 3)]
Operaciones con Tuplas#
Las tuplas son tipos inmutables, lo que significa que una vez asignado su valor, no puede ser modificado.
tupla = (1, 2, 3)
#tupla[0] = 5
Al igual que las listas, las tuplas también pueden ser anidadas.
tupla = 1, 2, ('a', 'b'), 3
print(tupla)
print(tupla[2][0])
(1, 2, ('a', 'b'), 3)
a
Es posible convertir una lista en una tupla. ¿Será posible en el sentido contrario?
lista = [1, 2, 3]
tupla = tuple(lista)
print(type(tupla))
print(tupla)
<class 'tuple'>
(1, 2, 3)
Al igual que con las listas, se puede iterar sobre las tuplas
for i in tupla:
print(i)
1
2
3
Una de sus mayores utilidades es que se puede asignar el valor de una tupla de \(n\) elementos, a \(n\) variables.
x,y,z = tupla
print(x,y,z)
1 2 3
6.3. Ejercicios#
Escriba un programa que comience leyendo del usuario las edades de todos los invitados de un grupo, con una edad introducida en cada línea. El usuario introducirá una línea en blanco para indicar que no hay más invitados en el grupo. A continuación, el programa debe mostrar el costo de la entrada para el grupo con un mensaje apropiado. El costo debe mostrarse con dos decimales.
Escriba un programa que calcula función exponencial a partir de la siguiente serie:
Escriba un programa que calcula función \(\operatorname{sin}\) a partir de la siguiente serie: \( \\sin(x)=\sum_{n=0}^N(-1)^n\frac{x^{2n+1}}{(2n+1)!} \)
Escriba un programa que calcula función cos a partir de la siguiente serie: \( \\cos(x)=\sum_{n=0}^N(-1)^n\frac{x^{2n}}{(2n)!} \)
Un proyectil lanzado verticalmente con una velocidad inicial \(v_o\) tendrá una posición \(y\) y velocidad \(v\), en el tiempo \(t\), dadas por:
donde \(y_o\) es la altura inicial y \(g=9.8 \text{m}/\text{s}^2\) es la aceleración de la gravedad.
Escriba un programa en el cual el usuario ingrese la altura inicial \(y_o\) y la velocidad inicial \(v_o\) y calcule la posición y la velocidad desde el momento inicial hasta el momento en que cae al suelo, cada \(0.1\ \text{s}\).