Semestre 01, 2026
Hasta ahora, cada variable guarda un solo valor.
nota1 = 85
nota2 = 90
nota3 = 78
Una lista es una colección ordenada de valores almacenados en una sola variable.
notas = [85, 90, 78]
frutas = ["manzana", "naranja", "uva"]
datos = [True, 42, "Python", 3.14]
[ ], separados por comas.| Sin lista | Con lista |
|---|---|
nota1 = 85 | notas = [85, 90, 78]Una sola variable Se puede recorrer con un ciclo |
nota2 = 90 | |
nota3 = 78 |
lista = []
Útil cuando se construye la lista poco a poco durante el programa.
La función len() devuelve la cantidad de elementos.
frutas = ["manzana", "naranja", "uva", "mango"]
print(len(frutas))
Resultado
4
Cada elemento de una lista tiene una posición llamada índice.
Los índices empiezan en 0.
frutas = ["manzana", "naranja", "uva", "mango"]
manzana naranja uva mango
0 1 2 3
frutas = ["manzana", "naranja", "uva", "mango"]
print(frutas[0]) # manzana
print(frutas[1]) # naranja
print(frutas[3]) # mango
Los índices negativos cuentan desde el final.
manzana naranja uva mango
-4 -3 -2 -1
frutas = ["manzana", "naranja", "uva", "mango"]
print(frutas[-1]) # mango
print(frutas[-2]) # uva
print(frutas[-4]) # manzana
A diferencia de los strings, las listas sí se pueden modificar.
frutas = ["manzana", "naranja", "uva"]
frutas[1] = "limón"
print(frutas) # ["manzana", "limón", "uva"]
frutas = ["manzana", "naranja", "uva"]
print(frutas[3]) # ERROR: IndexError
Regla importante
El índice máximo es len(lista) - 1.
Para una lista de 3 elementos, el índice máximo es 2.
Se puede extraer una porción de la lista.
Sintaxis
lista[inicio:fin] — el elemento en la posición fin no se incluye.
numeros = [10, 20, 30, 40, 50]
print(numeros[1:4]) # [20, 30, 40]
print(numeros[:3]) # [10, 20, 30]
print(numeros[2:]) # [30, 40, 50]
print(numeros[:]) # [10, 20, 30, 40, 50]
numeros = [10, 20, 30, 40, 50, 60]
print(numeros[::2]) # [10, 30, 50] — cada 2 elementos
print(numeros[::-1]) # [60, 50, 40, 30, 20, 10] — al revés
Sintaxis completa
lista[inicio:fin:paso] — el paso indica cuántas posiciones avanzar en cada iteración.
Un método es una función que pertenece a un tipo de dato.
Se llama con un punto: lista.metodo()
append — agregar al final
frutas = ["manzana", "naranja"]
frutas.append("uva")
print(frutas) # ["manzana", "naranja", "uva"]
append siempre agrega el elemento al final de la lista.
insert — agregar en una posición
frutas = ["manzana", "naranja", "uva"]
frutas.insert(1, "limón")
print(frutas) # ["manzana", "limón", "naranja", "uva"]
insert(índice, valor) — inserta el valor en la posición indicada. Los elementos siguientes se desplazan hacia la derecha.
remove — eliminar por valor
frutas = ["manzana", "naranja", "uva"]
frutas.remove("naranja")
print(frutas) # ["manzana", "uva"]
Elimina la primera aparición del valor.
Si el valor no existe, produce un error.
pop — eliminar por índice
frutas = ["manzana", "naranja", "uva"]
eliminado = frutas.pop(1)
print(eliminado) # naranja
print(frutas) # ["manzana", "uva"]
pop() sin argumento elimina el último elemento.
A diferencia de remove, devuelve el elemento eliminado.
remove vs pop| Método | ¿Cómo elimina? | ¿Devuelve algo? |
|---|---|---|
remove(valor) | Por valor | No |
pop(índice) | Por índice | Sí, el elemento eliminado |
pop() | Último elemento | Sí, el elemento eliminado |
sort — ordenar
numeros = [5, 2, 8, 1, 9, 3]
numeros.sort()
print(numeros) # [1, 2, 3, 5, 8, 9]
frutas = ["uva", "manzana", "naranja"]
frutas.sort()
print(frutas) # ["manzana", "naranja", "uva"]
sort() modifica la lista original en lugar de crear una nueva.
sort en orden inverso
numeros = [5, 2, 8, 1, 9]
numeros.sort(reverse=True)
print(numeros) # [9, 8, 5, 2, 1]
reverse — invertir
numeros = [1, 2, 3, 4, 5]
numeros.reverse()
print(numeros) # [5, 4, 3, 2, 1]
reverse() invierte el orden sin ordenar.sort(reverse=True) ordena de mayor a menor.
index y countBuscar posición
frutas = ["manzana", "naranja", "uva"]
pos = frutas.index("naranja")
print(pos) # 1
Contar apariciones
numeros = [1, 2, 2, 3, 2, 4]
print(numeros.count(2)) # 3
print(numeros.count(5)) # 0
extend — agregar otra lista
lista1 = [1, 2, 3]
lista2 = [4, 5, 6]
lista1.extend(lista2)
print(lista1) # [1, 2, 3, 4, 5, 6]
append — agrega una lista
lista.append([4, 5])
# [1, 2, 3, [4, 5]]
extend — agrega los elementos
lista.extend([4, 5])
# [1, 2, 3, 4, 5]
clear — vaciar la lista
frutas = ["manzana", "naranja", "uva"]
frutas.clear()
print(frutas) # []
| Método | ¿Qué hace? | ¿Modifica la lista? |
|---|---|---|
append(v) | Agrega v al final | Sí |
insert(i, v) | Inserta v en posición i | Sí |
remove(v) | Elimina primera aparición de v | Sí |
pop(i) | Elimina y devuelve elemento en i | Sí |
sort() | Ordena de menor a mayor | Sí |
| Método | ¿Qué hace? | ¿Modifica la lista? |
|---|---|---|
reverse() | Invierte el orden | Sí |
index(v) | Devuelve índice de v | No |
count(v) | Cuenta cuántas veces aparece v | No |
extend(lista) | Agrega todos los elementos de otra lista | Sí |
clear() | Elimina todos los elementos | Sí |
forEl ciclo for puede recorrer directamente los elementos de una lista.
frutas = ["manzana", "naranja", "uva", "mango"]
for fruta in frutas:
print(fruta)
Resultado
manzana
naranja
uva
mango
fruta toma automáticamente el valor de cada elemento.range() ni índice.
notas = [85, 90, 78, 92, 70]
total = 0
for nota in notas:
total = total + nota
promedio = total / len(notas)
print("Promedio:", promedio)
Resultado
Promedio: 83.0
range y lenCuando también se necesita el índice durante el recorrido.
frutas = ["manzana", "naranja", "uva"]
for i in range(len(frutas)):
print(i, frutas[i])
Resultado
0 manzana
1 naranja
2 uva
numeros = [5, 2, 8, 1, 9, 3]
mayor = numeros[0]
for numero in numeros:
if numero > mayor:
mayor = numero
print("El mayor es:", mayor)
El mayor es: 9
whileEl ciclo while también puede recorrer una lista usando un índice manual.
frutas = ["manzana", "naranja", "uva"]
i = 0
while i < len(frutas):
print(frutas[i])
i = i + 1
i es el índice que se actualiza manualmente.i < len(frutas) evita el error de índice fuera de rango.while
numeros = [10, 20, 30, 40, 50]
i = len(numeros) - 1
while i >= 0:
print(numeros[i])
i = i - 1
Se empieza desde el último índice y se decrementa hasta llegar a 0.
for vs while para listas| Criterio | for | while |
|---|---|---|
| Recorrer todos los elementos | Más simple | Funciona |
| Control manual del índice | No necesario | Control Total |
| Riesgo de ciclo infinito | No | Sí, si se olvida i = i + 1 |
| Recomendado para listas | Primera opción | Cuando se necesita el índice |
Ingresar 5 notas y mostrar cuáles aprobaron (≥ 61).
notas = []
for i in range(1, 6):
nota = float(input(f"Nota {i}: "))
notas.append(nota)
print("\nResultados:")
for i in range(len(notas)):
if notas[i] >= 61:
print(f"Nota {i+1}: {notas[i]} — Aprobado")
else:
print(f"Nota {i+1}: {notas[i]} — Reprobado")
productos = ["Laptop", "Monitor", "Teclado", "Mouse"]
precios = [5000, 1200, 350, 150]
print("Inventario:")
i = 0
while i < len(productos):
print(f"{productos[i]}: Q{precios[i]}")
i = i + 1
total = 0
for precio in precios:
total = total + precio
print(f"\nValor total del inventario: Q{total}")
Separar números pares e impares de una lista.
numeros = [3, 8, 15, 4, 22, 7, 10]
pares = []
impares = []
for numero in numeros:
if numero % 2 == 0:
pares.append(numero)
else:
impares.append(numero)
print("Pares:", pares)
print("Impares:", impares)
frutas = ["manzana", "naranja", "uva"]
print(frutas[3]) # ERROR: IndexError
while
frutas = ["manzana", "naranja", "uva"]
i = 0
while i < len(frutas):
print(frutas[i])
# Falta: i = i + 1 → ciclo infinito
Sin i = i + 1, el índice nunca avanza y el ciclo no termina.
append dentro de append
lista = []
lista.append(1)
lista.append(2)
lista.append([3, 4]) # agrega una lista dentro de la lista
print(lista) # [1, 2, [3, 4]]
Solución
lista.extend([3, 4]) # [1, 2, 3, 4]
numeros = [1, 2, 3, 4, 5]
for numero in numeros:
numeros.remove(numero) # comportamiento inesperado
print(numeros) # [2, 4] — no se eliminaron todos
for.remove con pop
frutas = ["manzana", "naranja", "uva"]
frutas.remove(1) # ERROR — remove recibe el VALOR, no el índice
frutas.pop("uva") # ERROR — pop recibe el ÍNDICE, no el valor
remove
Recibe el valor.
pop
Recibe el índice.
for fruta in frutas cuando solo se necesitan los valores.for i in range(len(lista)) cuando también se necesita el índice.while cuando el recorrido no es estrictamente secuencial.0 <= i < len(lista).for estudiante in estudiantes es más claro que for x in lista.¿Solo necesito los valores?
for elemento in lista
¿Necesito el índice también?
for i in range(len(lista))
¿El recorrido no es lineal o necesito saltar índices?
while