Saltar al contenido
Editor

Listas en Python: cómo crearlas, modificarlas y recorrerlas

Principiante30 min8 ejercicios145 XP

Esta lección es una traducción del original en inglés.Read in EnglishAvisar de un error de traducción

0/8 ejercicios

Piensa en tu lista de reproducción favorita. Tiene un montón de canciones guardadas en un orden concreto. Puedes añadir canciones nuevas, quitar las viejas, cambiarlas de orden o saltar directamente a la canción número cinco.

Una lista de Python funciona exactamente así. Es una colección ordenada de elementos que puedes cambiar cuando quieras. Listas de compras, nombres de estudiantes, récords de puntuación, colores de píxeles: las listas son una de las herramientas más útiles de todo Python.

En esta lección aprenderás a crear listas, a acceder a sus elementos por posición, a añadir y quitar elementos, a recorrerlas, a sacar porciones de ellas (slicing) y a evitar los errores más comunes de los principiantes.

Cómo crear una lista en Python

Para crear una lista, escribe los elementos entre corchetes [], separados por comas. Cada elemento puede ser de cualquier tipo: cadenas de texto, números, booleanos o incluso otras listas.

Crear listas con corchetes
# A list of strings
fruits = ["apple", "banana", "cherry"]
print(fruits)
# A list of numbers
scores = [95, 87, 72, 100, 68]
print(scores)
# A list with mixed types
mixed = ["Alice", 15, True, 3.14]
print(mixed)
Salida
['apple', 'banana', 'cherry']
[95, 87, 72, 100, 68]
['Alice', 15, True, 3.14]

Cada elemento de la lista tiene una posición llamada índice. El primer elemento está en el índice 0, el segundo en el índice 1, y así sucesivamente. Esta regla de "empezar en cero" se cumple en casi todos los lenguajes de programación.

También puedes crear una lista vacía e ir añadiéndole elementos después. Es algo habitual cuando no sabes de antemano qué va a contener tu lista.

Listas vacías y el constructor list()
# Empty list - two ways to create one
empty1 = []
empty2 = list()
print(empty1) # []
print(empty2) # []
# The list() constructor can also convert other things into lists
letters = list("hello")
print(letters) # ['h', 'e', 'l', 'l', 'o']
Salida
[]
[]
['h', 'e', 'l', 'l', 'o']

Cómo acceder a los elementos de una lista por índice en Python

Para obtener un solo elemento de una lista, escribe su número de índice entre corchetes después del nombre de la lista. Recuerda: los índices empiezan en 0, no en 1.

Acceder a elementos con índices positivos
colors = ["red", "green", "blue", "yellow", "purple"]
# Positive indexing (from the front)
print(colors[0]) # red (first item)
print(colors[1]) # green (second item)
print(colors[4]) # purple (fifth item)
Salida
red
green
purple

Python también admite índices negativos, que cuentan desde el final de la lista. -1 es el último elemento, -2 el penúltimo, y así sucesivamente.

Acceder a elementos con índices negativos
colors = ["red", "green", "blue", "yellow", "purple"]
# Negative indexing (from the end)
print(colors[-1]) # purple (last item)
print(colors[-2]) # yellow (second-to-last)
print(colors[-5]) # red (first item, the long way around)
Salida
purple
yellow
red

Los índices negativos son especialmente prácticos cuando quieres el último elemento pero no sabes cuánto mide la lista. my_list[-1] siempre te da el último.

Comprobar la longitud de la lista para evitar un IndexError
colors = ["red", "green", "blue"]
print(len(colors)) # 3 items
# This works fine:
print(colors[2]) # blue (index 2 = third item)
# This crashes:
# print(colors[3]) # IndexError! Only indexes 0, 1, 2 exist
Salida
3
blue

Cómo modificar listas en Python

Las listas son mutables, lo que significa que puedes cambiarlas después de crearlas. Puedes sustituir elementos concretos, añadir otros nuevos o combinar varias listas.

Cambiar un elemento por su índice

Para reemplazar un elemento concreto, asigna un valor nuevo a su índice. Esto sobrescribe por completo el valor anterior.

Reemplazar un elemento por su índice
fruits = ["apple", "banana", "cherry"]
print(fruits) # ['apple', 'banana', 'cherry']
# Change the second item
fruits[1] = "mango"
print(fruits) # ['apple', 'mango', 'cherry']
Salida
['apple', 'banana', 'cherry']
['apple', 'mango', 'cherry']

Añadir elementos con append(), insert() y extend()

Python te ofrece tres formas de añadir elementos a una lista. Cada una funciona de forma un poco distinta.

Tres formas de añadir elementos
shopping = ["milk", "eggs"]
# append() adds one item to the END
shopping.append("bread")
print(shopping) # ['milk', 'eggs', 'bread']
# insert() adds one item at a SPECIFIC position
shopping.insert(1, "butter") # Insert at index 1
print(shopping) # ['milk', 'butter', 'eggs', 'bread']
# extend() adds MULTIPLE items from another list
shopping.extend(["cheese", "juice"])
print(shopping) # ['milk', 'butter', 'eggs', 'bread', 'cheese', 'juice']
Salida
['milk', 'eggs', 'bread']
['milk', 'butter', 'eggs', 'bread']
['milk', 'butter', 'eggs', 'bread', 'cheese', 'juice']
append() lo añade como un solo elemento
a = [1, 2, 3]
a.append([4, 5])
print(a)  # [1, 2, 3, [4, 5]]
extend() añade cada elemento
a = [1, 2, 3]
a.extend([4, 5])
print(a)  # [1, 2, 3, 4, 5]

Cómo eliminar elementos de una lista en Python

Igual que hay varias formas de añadir elementos, Python te da varias formas de quitarlos. La opción correcta depende de si conoces el valor o la posición.

remove() y pop()
pets = ["cat", "dog", "fish", "hamster", "dog"]
# remove() deletes the FIRST matching value
pets.remove("dog")
print(pets) # ['cat', 'fish', 'hamster', 'dog']
# pop() removes by INDEX and returns the removed item
removed = pets.pop(1) # Remove index 1
print(removed) # fish
print(pets) # ['cat', 'hamster', 'dog']
# pop() with no argument removes the LAST item
last = pets.pop()
print(last) # dog
print(pets) # ['cat', 'hamster']
Salida
['cat', 'fish', 'hamster', 'dog']
fish
['cat', 'hamster', 'dog']
dog
['cat', 'hamster']

remove() busca un valor y elimina la primera coincidencia que encuentra. Si el valor no existe, Python lanza un ValueError.

pop() elimina por posición y te devuelve el elemento eliminado. Es útil cuando necesitas usar ese elemento después de quitarlo, como al repartir cartas de una baraja.

del y clear()
numbers = [10, 20, 30, 40, 50]
# del removes by index (doesn't return the value)
del numbers[0]
print(numbers) # [20, 30, 40, 50]
# clear() removes ALL items
numbers.clear()
print(numbers) # []
Salida
[20, 30, 40, 50]
[]

Cómo recorrer una lista en Python

Una de las cosas más potentes que puedes hacer con una lista es recorrerla con un bucle: ejecutar un trozo de código una vez por cada elemento. Así procesas cien elementos sin escribir cien líneas.

Bucle for básico sobre una lista
fruits = ["apple", "banana", "cherry"]
# The basic for loop
for fruit in fruits:
print(fruit)
Salida
apple
banana
cherry

Léelo así: "por cada fruta (fruit) de la lista fruits, imprime esa fruta". Python toma el primer elemento, ejecuta el código indentado, toma el siguiente elemento, lo vuelve a ejecutar, y así hasta terminar la lista.

A veces necesitas el número de índice además del elemento. La función enumerate() te da las dos cosas.

Usar enumerate() para obtener el índice y el valor
fruits = ["apple", "banana", "cherry"]
# enumerate() gives you the index AND the item
for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}")
Salida
0: apple
1: banana
2: cherry

También puedes recorrer la lista con un rango de números de índice. Es útil cuando necesitas comparar o modificar elementos según su posición.

Recorrer con range e índices
scores = [85, 92, 78, 95, 88]
# Loop using range(len(...))
for i in range(len(scores)):
print(f"Student {i + 1}: {scores[i]}")
Salida
Student 1: 85
Student 2: 92
Student 3: 78
Student 4: 95
Student 5: 88

Cómo comprobar si un elemento está en una lista de Python

La palabra clave in comprueba si un valor existe en una lista. Devuelve True o False.

Usar in y not in
colors = ["red", "green", "blue"]
print("red" in colors) # True
print("yellow" in colors) # False
# You can use it in if statements
if "green" in colors:
print("Green is in the list!")
# not in checks for absence
if "purple" not in colors:
print("Purple is NOT in the list.")
Salida
True
False
Green is in the list!
Purple is NOT in the list.

Es mucho más limpio que escribir un bucle para buscar un valor a mano. Usa in siempre que necesites comprobar si algo existe en una lista.

Porciones de listas en Python (slicing)

El rebanado (slicing) te permite tomar una porción de una lista en lugar de un solo elemento. La sintaxis es list[start:end], donde start se incluye y end no se incluye.

Porciones básicas de una lista
letters = ["a", "b", "c", "d", "e", "f"]
# Basic slicing: [start:end]
print(letters[1:4]) # ['b', 'c', 'd'] - indexes 1, 2, 3
# Omit start - defaults to beginning
print(letters[:3]) # ['a', 'b', 'c']
# Omit end - defaults to the end
print(letters[3:]) # ['d', 'e', 'f']
# Both omitted - copies the entire list
print(letters[:]) # ['a', 'b', 'c', 'd', 'e', 'f']
Salida
['b', 'c', 'd']
['a', 'b', 'c']
['d', 'e', 'f']
['a', 'b', 'c', 'd', 'e', 'f']

La regla de "el final no se incluye" parece rara al principio, pero tiene una ventaja: letters[:3] te da exactamente 3 elementos y letters[3:] te da el resto. Sin líos de uno de más o de menos.

Puedes añadir un tercer número llamado paso (step). Le dice a Python cuánto avanzar entre un elemento elegido y el siguiente.

Porciones con paso
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# [start:end:step]
print(numbers[0:10:2]) # [0, 2, 4, 6, 8] - every other item
print(numbers[::3]) # [0, 3, 6, 9] - every third item
# Negative step reverses the list
print(numbers[::-1]) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Salida
[0, 2, 4, 6, 8]
[0, 3, 6, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

Métodos útiles de las listas en Python

Las listas de Python traen muchos métodos integrados. Estos son los que usarás más a menudo.

sort(), reverse() y count()
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
# sort() arranges items in order (changes the original list)
numbers.sort()
print(numbers) # [1, 1, 2, 3, 4, 5, 6, 9]
# reverse() flips the list order
numbers.reverse()
print(numbers) # [9, 6, 5, 4, 3, 2, 1, 1]
# count() tells you how many times a value appears
print(numbers.count(1)) # 2
Salida
[1, 1, 2, 3, 4, 5, 6, 9]
[9, 6, 5, 4, 3, 2, 1, 1]
2
len(), min(), max() y sum()
scores = [85, 92, 78, 95, 88]
# len() - number of items
print(len(scores)) # 5
# min() - smallest value
print(min(scores)) # 78
# max() - largest value
print(max(scores)) # 95
# sum() - total of all items
print(sum(scores)) # 438
# Calculate the average
average = sum(scores) / len(scores)
print(f"Average: {average}") # Average: 87.6
Salida
5
78
95
438
Average: 87.6

Errores comunes con las listas de Python

Las listas tienen algunos comportamientos engañosos que hacen tropezar a casi todos los principiantes. Entenderlos ahora te ahorrará horas de depuración más adelante.

Aliasing: los dos nombres apuntan a la misma lista
# The aliasing problem
original = [1, 2, 3]
alias = original # NOT a copy!
alias.append(4)
print(original) # [1, 2, 3, 4] - original changed too!
print(alias) # [1, 2, 3, 4]
Salida
[1, 2, 3, 4]
[1, 2, 3, 4]
Hacer una copia de verdad con [:]
# The fix: make a real copy
original = [1, 2, 3]
real_copy = original[:] # Slice copy
real_copy.append(4)
print(original) # [1, 2, 3] - original is untouched
print(real_copy) # [1, 2, 3, 4]
Salida
[1, 2, 3]
[1, 2, 3, 4]
Alias (el mismo objeto)
a = [1, 2, 3]
b = a         # b IS a
b.append(4)
print(a)      # [1, 2, 3, 4]
Copia (un objeto distinto)
a = [1, 2, 3]
b = a[:]      # b is a COPY of a
b.append(4)
print(a)      # [1, 2, 3]

Ejercicios de práctica

¡Hora de practicar! Cada ejercicio se apoya en el anterior, y van de lo básico a lo más difícil. Intenta resolver cada uno antes de mirar las pistas.

Ejercicio 1: crea una lista e imprime su longitud
Escribe el código

Crea una lista llamada animals que contenga estas tres cadenas: "cat", "dog", "rabbit".

Después, imprime la longitud de la lista exactamente en este formato:

3
# Create your list
# Print the length
Ejercicio 2: accede al último elemento con un índice negativo
Escribe el código

Tienes una lista de ciudades. Usa índices negativos para imprimir la última ciudad de la lista.

Salida esperada:

Tokyo
cities = ["Paris", "London", "New York", "Tokyo"]
# Print the last city using negative indexing
Ejercicio 3: añade y quita elementos de la lista de compras
Escribe el código

Tienes una lista de compras. Sigue estos pasos en orden:

1. Añade "bread" al final de la lista

2. Quita "milk" de la lista

3. Imprime la lista final

Salida esperada:

['eggs', 'cheese', 'butter', 'bread']
shopping = ["eggs", "milk", "cheese", "butter"]
# Step 1: Add "bread" to the end
# Step 2: Remove "milk"
# Step 3: Print the list
Ejercicio 4: corrige el IndexError
Corrige el error

Este código intenta imprimir el último color de la lista, pero falla con un IndexError. Corrige el error para que imprima:

purple

Pista: la lista tiene 4 elementos. ¿Cuáles son los índices válidos?

colors = ["red", "green", "blue", "purple"]
print(colors[4])
Ejercicio 5: suma todos los números con un bucle
Escribe el código

Escribe un programa que calcule la suma de todos los números de la lista con un bucle for. No uses la función integrada sum().

Salida esperada:

150
numbers = [10, 20, 30, 40, 50]
# Calculate the total using a for loop
# Print the total
Ejercicio 6: encuentra el número más grande sin max()
Escribe el código

Encuentra el número más grande de la lista con un bucle for. No uses la función integrada max().

Salida esperada:

95
scores = [72, 85, 95, 60, 88]
# Find the largest score using a loop
# Print the largest score
Ejercicio 7: predice la salida (aliasing de listas)
Predice la salida

Lee este código con atención y predice qué va a imprimir. Piensa en qué pasa cuando dos variables apuntan a la misma lista.

Escribe la salida exacta (cada valor en una línea nueva si hay varios print).

a = [1, 2, 3]
b = a
b.append(4)
print(a)
print(b)
Ejercicio 8: invierte una lista sin reverse() ni [::-1]
Escribe el código

Invierte la lista dada con un bucle. No uses reverse(), reversed() ni [::-1].

Salida esperada:

[5, 4, 3, 2, 1]
original = [1, 2, 3, 4, 5]
# Reverse the list using a loop
# Print the reversed list

Resumen: lo que aprendiste sobre las listas en Python

¡Buen trabajo por llegar hasta aquí! Este es un repaso de todo lo que ya sabes:

ConceptoQué haceEjemplo
Crear una listaGuarda elementos en ordenfruits = ["a", "b"]
Acceder por índiceObtiene un elementofruits[0], fruits[-1]
Modificar elementosCambia un valorfruits[0] = "cherry"
append()Añade al finalfruits.append("date")
insert()Añade en una posiciónfruits.insert(1, "fig")
remove()Elimina por valorfruits.remove("a")
pop()Elimina por índicefruits.pop(0)
Bucle forProcesa cada elementofor f in fruits:
in / not inComprueba si un valor está en la lista"a" in fruits
Porciones (slicing)Obtiene una partefruits[1:3]
sort() / reverse()Reordena los elementosfruits.sort()
len() / sum()Cuenta o sumalen(fruits)

Las listas son una de las estructuras de datos más usadas en Python. Casi todos los programas reales las usan: desde aplicaciones web hasta ciencia de datos o desarrollo de videojuegos.

¿Qué sigue?

En la siguiente lección, [Comprensión de listas en Python](/python/python-comprehensions), aprenderás las list comprehensions, un atajo muy potente para crear y transformar listas en una sola línea de código.

Verás cómo sustituir 4 líneas de un bucle por una sola línea limpia, y aprenderás cuándo conviene usar una comprensión y cuándo es mejor un bucle normal.

Tutoriales relacionados

¿Te sirvió este tutorial?

Sugerir una mejora