Las listas en Python son colecciones ordenadas y mutables. Permiten guardar varios valores, acceder a ellos mediante índices, añadir y eliminar elementos, ordenar información y crear nuevas listas mediante filtros o transformaciones.
Una lista puede contener números, strings, objetos e incluso otras listas. Debido a su flexibilidad, aparece en casi todos los proyectos: inventarios, tareas, resultados de una API, filas de un archivo y registros temporales.
Crear una lista
empty = []
languages = ["Python", "JavaScript", "Go"]
mixed = [1, "text", True, 3.14]La función list() convierte otros iterables:
letters = list("Python")
numbers = list(range(1, 6))La referencia oficial del tipo list describe su construcción y operaciones básicas.
Acceder mediante índices
Los índices comienzan en cero:
colors = ["red", "green", "blue"]
print(colors[0])
print(colors[1])
print(colors[-1])Los índices negativos cuentan desde el final. Una posición inexistente genera IndexError.
Modificar elementos
Las listas son mutables:
tasks = ["study", "review", "practice"]
tasks[1] = "write notes"
print(tasks)También puedes reemplazar un rango:
numbers = [1, 2, 3, 4, 5]
numbers[1:4] = [20, 30]
print(numbers)Para comprender con detalle inicio, fin y paso, consulta la guía de slicing en Python.
Slicing de listas
values = [10, 20, 30, 40, 50, 60]
print(values[1:4])
print(values[:3])
print(values[3:])
print(values[::2])
print(values[::-1])El valor final queda excluido. El slicing crea una lista nueva, aunque los objetos internos pueden seguir compartidos.
Añadir elementos
append() añade un elemento al final:
fruits = ["apple", "banana"]
fruits.append("orange")extend() añade varios elementos:
fruits.extend(["grape", "pear"])insert() coloca un valor en una posición:
fruits.insert(1, "mango")Evita utilizar insert(0, ...) repetidamente en listas grandes, porque todos los elementos deben desplazarse. Para colas frecuentes, collections.deque suele ser mejor.
Eliminar elementos
remove() elimina la primera coincidencia:
fruits.remove("banana")Si el valor no existe, genera ValueError. pop() elimina por posición y devuelve el elemento:
last = fruits.pop()
first = fruits.pop(0)del elimina posiciones o rangos:
numbers = [1, 2, 3, 4, 5]
del numbers[1]
del numbers[1:3]clear() vacía la lista manteniendo el mismo objeto.
Buscar y contar
statuses = ["open", "closed", "open", "pending"]
print("open" in statuses)
print(statuses.count("open"))
print(statuses.index("pending"))index() genera un error si no encuentra el valor. Cuando la ausencia sea normal, utiliza primero in o maneja la excepción.
Recorrer una lista
prices = [19.90, 8.50, 32.00]
for price in prices:
print(f"${price:.2f}")Cuando se necesita el índice:
for index, price in enumerate(prices, start=1):
print(index, price)La guía de bucles for en Python explica enumerate(), zip(), break y continue.
Ordenar listas
sort() modifica la lista:
numbers = [8, 3, 10, 1]
numbers.sort()
print(numbers)sorted() devuelve una lista nueva y acepta cualquier iterable:
original = [8, 3, 10, 1]
ordered = sorted(original)
print(original)
print(ordered)Para criterios personalizados:
users = [
{"name": "Mia", "age": 31},
{"name": "Ava", "age": 24},
{"name": "Noah", "age": 28},
]
users.sort(key=lambda user: user["age"])La comparación completa está en sort() vs sorted() en Python.
Copiar una lista
Asignar una lista a otra variable no crea una copia:
original = [1, 2, 3]
alias = original
alias.append(4)
print(original)Para una copia superficial:
copy_a = original.copy()
copy_b = original[:]
copy_c = list(original)Los objetos mutables anidados continúan compartidos:
matrix = [[1, 2], [3, 4]]
shallow = matrix.copy()
shallow[0].append(99)
print(matrix)Cuando necesitas independencia completa, utiliza copy.deepcopy() con criterio.
List comprehensions
Una comprensión transforma valores:
squares = [number ** 2 for number in range(1, 6)]También puede filtrar:
even_squares = [
number ** 2
for number in range(1, 11)
if number % 2 == 0
]La guía de list comprehensions en Python presenta condiciones, bucles anidados y generadores.
Listas anidadas
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
]
print(matrix[1][2])Recorre filas y columnas:
for row in matrix:
for value in row:
print(value)Para cálculo numérico intensivo, un array de NumPy ofrece operaciones vectorizadas y tipos homogéneos.
Combinar listas con zip()
names = ["Ava", "Noah", "Mia"]
scores = [91, 84, 95]
for name, score in zip(names, scores, strict=True):
print(f"{name}: {score}")strict=True ayuda a detectar longitudes diferentes cuando eso representa un error.
Desempaquetar una lista
first, second, third = [10, 20, 30]
start, *middle, end = [1, 2, 3, 4, 5]El asterisco recoge los elementos restantes en otra lista.
Ejemplo: lista de tareas
tasks = []
def add_task(description):
cleaned = description.strip()
if not cleaned:
raise ValueError("La tarea no puede estar vacía")
tasks.append({
"description": cleaned,
"completed": False,
})
def complete_task(index):
tasks[index]["completed"] = True
add_task("Estudiar listas")
add_task("Resolver ejercicios")
complete_task(0)
for index, task in enumerate(tasks, start=1):
marker = "✓" if task["completed"] else " "
print(f"{index}. [{marker}] {task['description']}")Este ejemplo combina listas, diccionarios, funciones y validación. La guía de diccionarios en Python explica cómo representar registros con campos.
Eliminar duplicados
Si el orden no importa:
unique = list(set(values))Para conservar el orden:
unique = list(dict.fromkeys(values))Los sets son adecuados para pertenencia y unicidad. La guía de sets en Python explica unión, intersección y diferencia.
Rendimiento básico
Añadir o eliminar al final suele ser eficiente. Insertar al principio o buscar un valor requiere recorrer o desplazar elementos. Si haces muchas búsquedas de pertenencia, considera un set. Si necesitas relacionar nombres con valores, utiliza un diccionario.
Errores frecuentes
- Confundir asignación con copia.
- Modificar una lista mientras se recorre.
- Usar
append()cuando se queríaextend(). - Esperar que
sort()devuelva la lista. - Acceder a índices sin validar el tamaño.
- Crear comprensiones demasiado complejas.
- Elegir una lista cuando se necesita búsqueda rápida por clave.
Documentación adicional
El tutorial oficial sobre listas cubre métodos, pilas, colas y comprensiones.
Conclusión
Las listas son la colección general más utilizada de Python. Domina índices, slicing, métodos de modificación, recorridos, ordenación y copias. Después practica con una lista de tareas, un inventario o un informe para aprender cuándo conviene cambiar a una tupla, set o diccionario.






