Tema 9 - Listas en Python
Almacenar, recorrer y modificar colecciones ordenadas de datos con seguridad
y claridad
Asignatura 05GMAT - Grado en Matemáticas
Propósito del tema
Este tema introduce la estructura de datos más importante del primer curso de programación:
la lista. Con ella el estudiante deja de trabajar únicamente con valores aislados y empieza
a manipular colecciones ordenadas de elementos. Se estudian creación, acceso por índice,
recorrido, modificación, métodos básicos, listas anidadas y patrones de resolución de problemas
con listas.
Asignatura: Introducción a la Programación
Bloque: Tema 9 - Listas en Python
Lenguaje de referencia: Python
Enfoque: Listas, índices, recorridos, métodos, listas de listas y primeras compren-
siones
Formato: Manual de estudio y refuerzo
Documento preparado a partir de la guía oficial de la asignatura y de la bibliografía base sobre Python y
construcción de software.
Introducción a la Programación - Tema 9 Listas en Python
Índice
1. Presentación del tema 2
2. Qué es una lista 2
2.1. Definición informal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.2. Ventajas principales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
3. Creación de listas 2
3.1. Listas literales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
3.2. Listas a partir de repetición o rango . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
4. Índices y acceso a elementos 3
4.1. Índices negativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
4.2. Errores por índices fuera de rango . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
5. Longitud y pertenencia 4
5.1. Longitud con len() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
5.2. Operador de pertenencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
6. Rebanado o slicing 4
7. Mutabilidad: modificar listas 4
8. Métodos básicos de listas 5
8.1. Añadir elementos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
8.2. Insertar en una posición . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
8.3. Eliminar elementos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
8.4. Ordenar y revertir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
8.5. Contar y localizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
9. Recorridos de listas 6
9.1. Recorrido directo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
9.2. Recorrido por índices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
9.3. Patrones habituales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
[Link] clásicos con listas 6
10.1. Suma y media . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
10.2. Búsqueda de máximo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
10.3. Filtrado sencillo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
[Link], referencias y alias 7
11.1. Cómo copiar correctamente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
[Link] anidadas 7
[Link] sencillas 8
[Link] resuelto completo 8
14.1. Problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
14.2. Solución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1 / 11
Introducción a la Programación - Tema 9 Listas en Python
14.3. Comentario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
[Link] laboratorio guiado 9
[Link] frecuentes 10
[Link] propuestos 10
[Link] breves 10
[Link] final 11
[Link]ía 11
2 / 11
Introducción a la Programación - Tema 9 Listas en Python
1. Presentación del tema
Hasta ahora, el estudiante ha trabajado sobre todo con variables que almacenan un único valor: un
número, una cadena o un dato booleano. Sin embargo, muchos problemas reales requieren manejar
varios datos del mismo tipo o secuencias sobre las que hay que iterar, buscar, actualizar o
resumir.
Las listas de Python permiten modelizar ese tipo de situaciones de forma natural. Son una estructura
flexible, ordenada y mutable. Gracias a ellas podemos representar calificaciones, temperaturas,
nombres, secuencias numéricas, resultados de experimentos y, más adelante, vectores y matrices.
Idea central
Una lista es una secuencia ordenada y mutable de elementos. Puede contener cero, uno o
muchos valores, incluso de tipos distintos, aunque en programación inicial conviene usar listas
homogéneas siempre que sea posible.
2. Qué es una lista
2.1. Definición informal
Una lista es una colección ordenada de elementos colocados entre corchetes y separados por comas.
notas = [7.5, 8.0, 6.25, 9.1]
nombres = ["Ana", "Luis", "Marta"]
vacia = []
Definición
Una lista en Python es un objeto secuencial que:
mantiene el orden de los elementos,
permite acceder a cada posición mediante un índice,
puede modificarse una vez creada,
admite recorridos, búsquedas, inserciones y borrados.
2.2. Ventajas principales
Agrupan datos relacionados en una sola variable.
Facilitan el uso de bucles.
Permiten representar secuencias de longitud variable.
Son la base de estructuras más complejas, como listas de listas.
3. Creación de listas
3.1. Listas literales
La forma más directa de crear una lista es escribir sus elementos entre corchetes.
3 / 11
Introducción a la Programación - Tema 9 Listas en Python
primos = [2, 3, 5, 7, 11]
ciudades = ["Valencia", "Gandia", "Alicante"]
mezcla = [3, "hola", True]
3.2. Listas a partir de repetición o rango
ceros = [0] * 5
numeros = list(range(1, 6))
# numeros vale [1, 2, 3, 4, 5]
Advertencia
Aunque Python permite listas con elementos de tipos diferentes, en una asignatura inicial es
recomendable evitar mezclas innecesarias. Trabajar con listas homogéneas hace el código más
claro y reduce errores.
4. Índices y acceso a elementos
Cada posición de una lista tiene un índice. El primero es 0.
0 1 2 3 4
10 20 30 40 50
Lista datos = [10, 20, 30, 40, 50]
datos = [10, 20, 30, 40, 50]
print(datos[0]) # 10
print(datos[3]) # 40
print(datos[-1]) # 50
4.1. Índices negativos
Los índices negativos cuentan desde el final:
-1: último elemento.
-2: penúltimo elemento.
4.2. Errores por índices fuera de rango
valores = [4, 8, 15]
print(valores[5])
Eso provoca un error porque la posición 5 no existe.
4 / 11
Introducción a la Programación - Tema 9 Listas en Python
Error frecuente
Confundir longitud con último índice. Si una lista tiene longitud 5, sus índices válidos son 0,
1, 2, 3 y 4.
5. Longitud y pertenencia
5.1. Longitud con len()
colores = ["rojo", "verde", "azul"]
print(len(colores)) # 3
5.2. Operador de pertenencia
frutas = ["manzana", "pera", "uva"]
print("pera" in frutas) # True
print("naranja" not in frutas) # True
6. Rebanado o slicing
El rebanado permite extraer sublistas.
numeros = [0, 1, 2, 3, 4, 5, 6]
print(numeros[1:4]) # [1, 2, 3]
print(numeros[:3]) # [0, 1, 2]
print(numeros[3:]) # [3, 4, 5, 6]
print(numeros[::2]) # [0, 2, 4, 6]
Observación
En una expresión lista[a:b], se incluye el índice a pero se excluye el índice b.
7. Mutabilidad: modificar listas
Una gran diferencia respecto a las cadenas es que las listas son mutables. Podemos cambiar un
elemento concreto.
precios = [10.0, 12.5, 9.8]
precios[1] = 13.0
print(precios) # [10.0, 13.0, 9.8]
También podemos sustituir un tramo de la lista.
valores = [1, 2, 3, 4, 5]
valores[1:3] = [20, 30]
print(valores) # [1, 20, 30, 4, 5]
5 / 11
Introducción a la Programación - Tema 9 Listas en Python
8. Métodos básicos de listas
8.1. Añadir elementos
nums = [1, 2, 3]
[Link](4)
# [1, 2, 3, 4]
8.2. Insertar en una posición
[Link](1, 99)
# [1, 99, 2, 3, 4]
8.3. Eliminar elementos
[Link](99) # elimina por valor
ultimo = [Link]() # elimina y devuelve el último
8.4. Ordenar y revertir
datos = [7, 2, 9, 1]
[Link]() # modifica la lista
[Link]() # invierte el orden
8.5. Contar y localizar
letras = ["a", "b", "a", "c"]
print([Link]("a")) # 2
print([Link]("c")) # 3
Método Efecto principal Devuelve
append(x) Añade x al final None
insert(i, x) Inserta x en la posición i None
remove(x) Elimina la primera aparición de x None
pop() Elimina el último elemento elemento eliminado
sort() Ordena la lista en sitio None
reverse() Invierte el orden en sitio None
count(x) Cuenta apariciones de x entero
index(x) Busca la primera posición de x entero
Muy importante
Muchos métodos de lista modifican la lista y devuelven None. Por eso no debe escribirse:
ordenada = [Link]() # incorrecto como idea de copia
Si se quiere una copia ordenada, conviene usar sorted(datos).
6 / 11
Introducción a la Programación - Tema 9 Listas en Python
9. Recorridos de listas
9.1. Recorrido directo
notas = [6.5, 8.0, 7.25]
for nota in notas:
print(nota)
Este es el recorrido más natural cuando solo interesa el valor.
9.2. Recorrido por índices
notas = [6.5, 8.0, 7.25]
for i in range(len(notas)):
print(i, notas[i])
Se usa cuando también interesa la posición.
9.3. Patrones habituales
Sumar todos los elementos.
Contar cuántos cumplen una condición.
Buscar el mayor o el menor.
Construir una nueva lista a partir de otra.
10. Patrones clásicos con listas
10.1. Suma y media
notas = [6.5, 8.0, 7.25, 9.0]
suma = 0
for nota in notas:
suma += nota
media = suma / len(notas)
print(media)
10.2. Búsqueda de máximo
valores = [12, 7, 19, 4, 16]
maximo = valores[0]
for x in valores:
if x > maximo:
maximo = x
print(maximo)
7 / 11
Introducción a la Programación - Tema 9 Listas en Python
10.3. Filtrado sencillo
nums = [1, 2, 3, 4, 5, 6]
pares = []
for x in nums:
if x % 2 == 0:
[Link](x)
print(pares)
11. Copias, referencias y alias
Este es uno de los puntos más delicados del tema.
a = [1, 2, 3]
b = a
b[0] = 99
print(a) # [99, 2, 3]
Aquí a y b apuntan a la misma lista.
11.1. Cómo copiar correctamente
a = [1, 2, 3]
b = a[:] # o list(a)
b[0] = 99
print(a) # [1, 2, 3]
print(b) # [99, 2, 3]
Error frecuente
Usar una asignación simple esperando una copia independiente. En listas, b = a no crea una
nueva lista: crea otra referencia al mismo objeto.
12. Listas anidadas
Una lista puede contener otras listas.
matriz = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
print(matriz[1][2]) # 6
Esto prepara el terreno para vectores y matrices del tema siguiente.
8 / 11
Introducción a la Programación - Tema 9 Listas en Python
lista de listas
1 2 3
matriz[1][2] = 6
4 5 6
fila 1, columna 2
7 8 9
13. Comprensiones sencillas
Una comprensión de listas permite construir listas de forma compacta.
cuadrados = [x**2 for x in range(1, 6)]
print(cuadrados) # [1, 4, 9, 16, 25]
Con condición:
pares = [x for x in range(10) if x % 2 == 0]
Criterio de uso
Las comprensiones son útiles cuando la transformación es simple y legible. Si la lógica se complica,
un bucle tradicional suele ser mejor opción didáctica.
14. Ejemplo resuelto completo
14.1. Problema
Dada una lista de temperaturas semanales, calcular:
la temperatura media,
la máxima,
cuántos días superan la media.
14.2. Solución
temperaturas = [18, 21, 19, 24, 22, 20, 23]
suma = 0
for t in temperaturas:
suma += t
media = suma / len(temperaturas)
maxima = temperaturas[0]
for t in temperaturas:
if t > maxima:
maxima = t
contador = 0
9 / 11
Introducción a la Programación - Tema 9 Listas en Python
for t in temperaturas:
if t > media:
contador += 1
print(f"Media: {media:.2f}")
print(f"Máxima: {maxima}")
print(f"Días por encima de la media: {contador}")
14.3. Comentario
El problema combina tres patrones básicos sobre listas: acumulación, búsqueda de extremo y conteo
condicionado. Resolver bien este tipo de ejercicios es esencial antes de avanzar hacia estructuras
bidimensionales.
15. Mini laboratorio guiado
Laboratorio
Escribe un programa que:
1. pida al usuario cinco números y los guarde en una lista,
2. muestre la lista completa,
3. calcule la suma y la media,
4. construya otra lista con los números mayores que la media,
5. muestre ambas listas.
Una posible solución es:
nums = []
for i in range(5):
valor = float(input(f"Introduce el número {i+1}: "))
[Link](valor)
suma = 0
for x in nums:
suma += x
media = suma / len(nums)
mayores = []
for x in nums:
if x > media:
[Link](x)
print("Lista original:", nums)
print(f"Media: {media:.2f}")
print("Mayores que la media:", mayores)
10 / 11
Introducción a la Programación - Tema 9 Listas en Python
16. Errores frecuentes
Intentar acceder al último elemento con lista[len(lista)] en vez de lista[len(lista)-1]
o lista[-1].
Modificar una lista creyendo que se trabaja con una copia independiente.
Usar sort() esperando un valor de retorno.
Mezclar tipos sin necesidad dentro de la misma lista.
Confundir recorrido por valores con recorrido por índices.
Olvidar que el extremo derecho del slicing no se incluye.
17. Ejercicios propuestos
1. Crear una lista con los diez primeros números naturales y mostrar solo los elementos en posiciones
pares.
2. Pedir al usuario una secuencia de seis notas y calcular la media.
3. Dada una lista de enteros, construir otra con sus cuadrados.
4. Contar cuántos elementos de una lista son positivos, negativos y nulos.
5. Encontrar el mínimo y el máximo de una lista sin usar min() ni max().
6. Eliminar todas las apariciones de un valor concreto de una lista.
7. Invertir una lista sin usar reverse().
8. Dada una lista de palabras, construir una lista con sus longitudes.
9. Comprobar si una lista de enteros está ordenada de menor a mayor.
10. Crear una matriz 3 × 3 con listas anidadas y calcular la suma de sus elementos.
18. Respuestas breves
1. Usar range(0, len(lista), 2) o slicing lista[::2].
2. Recoger datos con append(), sumar con acumulador y dividir por len().
3. Bucle con append(x**2) o comprensión.
4. Inicializar tres contadores y actualizar según el signo.
5. Inicializar con el primer elemento y comparar en un recorrido.
6. Puede resolverse con una nueva lista filtrada.
7. Puede construirse una nueva lista recorriendo desde el final.
8. Aplicar len() a cada palabra.
9. Comparar cada elemento con el siguiente.
10. Recorrer filas y columnas acumulando la suma total.
11 / 11
Introducción a la Programación - Tema 9 Listas en Python
19. Resumen final
Síntesis
Las listas son secuencias ordenadas y mutables.
El acceso se realiza mediante índices, empezando en 0.
len(), in, slicing y los métodos básicos permiten operar con comodidad.
Los recorridos con for y los patrones de suma, conteo, búsqueda y filtrado son fundamentales.
La diferencia entre copia y referencia debe dominarse cuanto antes.
Las listas anidadas preparan el estudio de vectores y matrices.
20. Bibliografía
Barry, P. & Griffiths, D. Head First Programming. O’Reilly.
Lutz, M. Learning Python. 5th ed. O’Reilly.
Matthes, E. Python Crash Course. 2nd ed. No Starch Press.
McConnell, S. Code Complete. 2nd ed. Microsoft Press.
Guía oficial de la asignatura 05GMAT - Introducción a la Programación.
12 / 11