Versión borrador / preliminar
Este documento es una versión preliminar para uso interno. Si encuentra algún problema o error, o si tiene algún comentario por favor repórtelo a los autores.
Listas#
Objetivo de la sección
El objetivo de esta sección es introducir las listas como un tipo de datos mutable y secuencial, explorando cómo crear, modificar y trabajar con listas en Python.
Las listas son uno de los tipos de datos más versátiles y utilizados en Python. A diferencia de las cadenas de caracteres, las listas son mutables, lo que significa que podemos modificar su contenido después de haberlas creado.
El tipo list en Python#
Una lista es una colección ordenada de elementos que pueden ser de cualquier tipo. Las listas se crean usando corchetes []
y los elementos se separan por comas.
Crear listas#
Hay varias formas de crear listas en Python:
# Lista vacía
lista_vacia = []
lista_vacia2 = list()
# Lista con elementos
frutas = ['manzana', 'banana', 'naranja']
numeros = [1, 2, 3, 4, 5]
mixta = ['texto', 42, True, 3.14]
# Usando range
numeros_rango = list(range(1, 6)) # [1, 2, 3, 4, 5]
Indexar listas#
Al igual que las cadenas, podemos acceder a elementos individuales usando índices:
frutas = ['manzana', 'banana', 'naranja']
print(frutas[0]) # manzana
print(frutas[1]) # banana
print(frutas[-1]) # naranja (último elemento)
Ejemplo de función para imprimir todos los elementos:
def imprimir_elementos(lista: list) -> None:
i = 0
while i < len(lista):
print(i, "->", lista[i])
i += 1
Ejemplo: calcular el promedio#
def calcular_promedio(numeros: list) -> float:
if len(numeros) == 0:
return 0
suma = 0
for numero in numeros:
suma += numero
return suma / len(numeros)
# Uso
notas = [85, 92, 78, 96, 88]
promedio = calcular_promedio(notas)
print(f"El promedio es: {promedio}")
Modificar listas#
Una de las características más importantes de las listas es que son mutables, es decir, podemos cambiar su contenido.
El método append()#
El método append()
es fundamental para agregar elementos al final de una lista:
➕ Visualización Interactiva: append()
¿Quieres ver exactamente cómo funciona append()
? Nuestra visualización interactiva te muestra paso a paso cómo se agregan elementos al final de una lista.
Experimenta con append() y observa cómo crecen las listas dinámicamente
Otros métodos de modificación#
# append - agregar al final
frutas = ['manzana', 'banana']
frutas.append('naranja')
print(frutas) # ['manzana', 'banana', 'naranja']
# insert - insertar en posición específica
frutas.insert(1, 'pera')
print(frutas) # ['manzana', 'pera', 'banana', 'naranja']
# remove - eliminar por valor
frutas.remove('banana')
print(frutas) # ['manzana', 'pera', 'naranja']
# del - eliminar por índice
del frutas[0]
print(frutas) # ['pera', 'naranja']
# copy - crear una copia
copia_frutas = frutas.copy()
⚠️ ¡Cuidado con la mutabilidad!
Cuando modificas una lista, todos los nombres que apuntan a esa lista ven el cambio:
lista_a = [1, 2, 3]
lista_b = lista_a # ¡No es una copia!
lista_a.append(4)
print(lista_b) # [1, 2, 3, 4] - ¡También cambió!
# Para hacer una copia real:
lista_c = lista_a.copy()
Funciones, métodos y operadores útiles#
Funciones básicas#
numeros = [3, 1, 4, 1, 5, 9, 2, 6]
len(numeros) # 8 - longitud
min(numeros) # 1 - valor mínimo
max(numeros) # 9 - valor máximo
sum(numeros) # 31 - suma de elementos
Operador in#
frutas = ['manzana', 'banana', 'naranja']
print('banana' in frutas) # True
print('uva' in frutas) # False
Comparaciones#
lista1 = [1, 2, 3]
lista2 = [1, 2, 3]
lista3 = [1, 2, 4]
print(lista1 == lista2) # True
print(lista1 < lista3) # True (comparación lexicográfica)
Métodos útiles#
numeros = [3, 1, 4, 1, 5, 9, 2, 6, 5]
numeros.count(1) # 2 - cuántas veces aparece 1
numeros.index(4) # 2 - índice de la primera aparición de 4
numeros.sort() # Ordena la lista in-place
numeros.reverse() # Invierte la lista in-place
Split & Join#
Dos métodos muy útiles para trabajar entre cadenas y listas:
# split - convierte cadena en lista
frase = "Python es genial"
palabras = frase.split() # ['Python', 'es', 'genial']
palabras_coma = "a,b,c,d".split(',') # ['a', 'b', 'c', 'd']
# join - convierte lista en cadena
lista = ['Python', 'es', 'genial']
frase_nueva = ' '.join(lista) # "Python es genial"
csv = ','.join(['a', 'b', 'c']) # "a,b,c"
Listas complejas#
Listas de listas#
# Cada estudiante es una lista [nombre, nota]
estudiantes = [
['Ana', 85],
['Bob', 92],
['Carlos', 78]
]
# Acceder a datos
print(estudiantes[0][0]) # Ana
print(estudiantes[1][1]) # 92
Listas de diccionarios#
# Cada actividad es un diccionario
actividades = [
{'actividad': 'Examen 1', 'curso': 'Matemáticas', 'nota': 85},
{'actividad': 'Tarea 1', 'curso': 'Python', 'nota': 92},
{'actividad': 'Proyecto', 'curso': 'Python', 'nota': 88}
]
# Calcular promedio de Python
notas_python = []
for actividad in actividades:
if actividad['curso'] == 'Python':
notas_python.append(actividad['nota'])
promedio_python = sum(notas_python) / len(notas_python)
Diccionario con listas#
# Las llaves son actividades, valores son listas de notas
notas_por_actividad = {
'Examen 1': [85, 92, 78, 96],
'Tarea 1': [88, 94, 82, 91],
'Proyecto': [90, 87, 93, 89]
}
# Promedio del Examen 1
promedio_examen1 = sum(notas_por_actividad['Examen 1']) / len(notas_por_actividad['Examen 1'])
Ejercicios#
💻 Ejercicios prácticos
Prueba estos ejercicios usando la visualización de append cuando sea apropiado:
Lista de pares: Crear una lista con solo los números pares del 1 al 20
Invertir números: Dada una lista, crear otra con los números en orden inverso
Números aleatorios: Crear una lista con 10 números aleatorios
Contar mayúsculas: Usar split para contar palabras en mayúscula en una frase
Buscar subcadena: En cuántas palabras aparece una determinada cadena
Inserción ordenada: Insertar un elemento en una lista manteniendo el orden
Promedio de notas: Calcular el promedio de las notas de un estudiante
Mejor actividad: Encontrar la actividad con mayor nota promedio
Filtrar extremos: Eliminar elementos del principio y final hasta cumplir una condición
Más allá de Python#
Las listas son estructuras fundamentales en programación. Otros lenguajes tienen conceptos similares:
Java: ArrayList, LinkedList
C++: vector, list
JavaScript: Array
C#: List
, Array
La comprensión profunda de las listas te preparará para trabajar con estructuras de datos más avanzadas como pilas, colas y árboles.