Listas de Python: Una Guía Completa
Aprende listas de Python: crea, accede, segmenta, modifica, ordena y usa comprensiones de listas. Cubre todos los métodos integrados con ejemplos.
Esta página cubre todo lo que necesitas saber sobre las listas de Python — cómo crearlas, leer y modificar su contenido, usar el segmentado, aplicar métodos integrados, escribir comprensiones de listas, trabajar con listas anidadas y desempaquetar valores de listas en variables.
¿Qué Es una Lista de Python?
Una lista es la estructura de datos integrada más versátil de Python. Almacena una secuencia ordenada de elementos, donde cada elemento puede ser de cualquier tipo: un número, un string, un boolean, otra lista o cualquier objeto. Las listas son:
- Ordenadas — los elementos mantienen la posición que les asignas.
- Mutables — puedes agregar, eliminar o cambiar elementos después de crear la lista.
- Indexadas — cada elemento tiene un índice entero que comienza en
0. - Heterogéneas — una sola lista puede contener valores de diferentes tipos.
Crea una lista con corchetes, separando los elementos con comas:
Una lista vacía se escribe como []. Las listas también pueden contener tipos mixtos:
mixed = [42, 'hello', True, 3.14, None]
print(mixed)
# [42, 'hello', True, 3.14, None]Acceder a los Elementos de una Lista
Indexación Positiva
Accede a un elemento por su posición de base cero dentro de corchetes:
Indexación Negativa
Los índices negativos cuentan hacia atrás desde el final. -1 es el último elemento, -2 el penúltimo, y así sucesivamente — útil cuando conoces la posición desde el final pero no la longitud total:
Segmentado
Un segmento extrae una sub-lista usando la sintaxis list[start:stop:step]. El índice stop es exclusivo (no se incluye).
fruits = ['apple', 'banana', 'cherry', 'date', 'elderberry']
print(fruits[1:4]) # ['banana', 'cherry', 'date']
print(fruits[:2]) # ['apple', 'banana'] — start defaults to 0
print(fruits[2:]) # ['cherry', 'date', 'elderberry'] — stop defaults to end
print(fruits[::2]) # ['apple', 'cherry', 'elderberry'] — every other item
print(fruits[::-1]) # ['elderberry', 'date', 'cherry', 'banana', 'apple'] — reversed copyEl segmentado siempre devuelve una nueva lista y nunca genera un IndexError, incluso si los índices están fuera de rango.
Modificar Elementos de una Lista
Debido a que las listas son mutables, puedes asignar un nuevo valor a cualquier índice:
También puedes reemplazar un rango de elementos usando la asignación por segmento:
nums = [1, 2, 3, 4, 5]
nums[1:3] = [20, 30]
print(nums)
# [1, 20, 30, 4, 5]Agregar Elementos
append() — Agregar al Final
append() agrega un solo elemento al final de la lista en el lugar:
insert() — Agregar en una Posición Específica
insert(index, value) coloca un nuevo elemento antes del índice dado sin eliminar nada:
fruits = ['apple', 'banana', 'cherry']
fruits.insert(1, 'mango')
print(fruits)
# ['apple', 'mango', 'banana', 'cherry']extend() — Agregar Múltiples Elementos
extend() agrega todos los elementos de otro iterable (lista, tupla o string) al final:
a = [1, 2, 3]
b = [4, 5, 6]
a.extend(b)
print(a)
# [1, 2, 3, 4, 5, 6]El operador + hace lo mismo pero devuelve una nueva lista en lugar de modificar la original:
combined = [1, 2, 3] + [4, 5, 6]
print(combined)
# [1, 2, 3, 4, 5, 6]Eliminar Elementos
remove() — Eliminar por Valor
remove() elimina la primera aparición de un valor. Genera ValueError si el valor no está en la lista:
pop() — Eliminar por Índice
pop() elimina y devuelve el elemento en un índice dado (predeterminado: último elemento). Esto es útil cuando necesitas tanto recuperar como eliminar un elemento:
fruits = ['apple', 'banana', 'cherry']
last = fruits.pop()
print(last) # cherry
print(fruits) # ['apple', 'banana']
first = fruits.pop(0)
print(first) # apple
print(fruits) # ['banana']del — Eliminar por Índice o Segmento
La instrucción del elimina un elemento por índice o un segmento completo:
clear() — Eliminar Todos los Elementos
clear() vacía la lista sin eliminarla:
fruits = ['apple', 'banana', 'cherry']
fruits.clear()
print(fruits)
# []Métodos Útiles de Lista
Las listas de Python incluyen un conjunto completo de métodos integrados. Consulta Métodos de Lista de Python para la referencia completa.
len() — Longitud de la Lista
sort() — Ordenar en el Lugar
sort() ordena la lista en orden ascendente de forma predeterminada. Usa reverse=True para orden descendente:
Usa el parámetro key para ordenar por un criterio personalizado — por ejemplo, por la longitud de las palabras:
words = ['banana', 'apple', 'cherry', 'date']
words.sort(key=len)
print(words)
# ['date', 'apple', 'banana', 'cherry']sort() modifica la lista en el lugar. Para obtener una copia ordenada sin cambiar la original, usa la función integrada sorted():
original = [3, 1, 2]
s = sorted(original)
print(original) # [3, 1, 2]
print(s) # [1, 2, 3]Consulta Ordenar Listas para más patrones de ordenamiento.
reverse() — Invertir en el Lugar
count() — Contar Ocurrencias
count(value) devuelve cuántas veces aparece un valor:
nums = [1, 2, 2, 3, 2, 4]
print(nums.count(2))
# 3index() — Encontrar un Valor
index(value) devuelve el índice de la primera aparición. Genera ValueError si no se encuentra:
nums = [1, 2, 3, 4]
print(nums.index(3))
# 2copy() — Copia Superficial
copy() devuelve una nueva lista con los mismos elementos de nivel superior. Modificar la copia no afecta a la original:
original = [1, 2, 3]
copy = original.copy()
copy.append(4)
print(original) # [1, 2, 3]
print(copy) # [1, 2, 3, 4]Ordenar vs. Invertir: Diferencia Clave
sort() y reverse() ambos modifican la lista en el lugar y devuelven None. Un error común es escribir my_list = my_list.sort(), lo que reemplaza la lista con None. Siempre llámalos como instrucciones:
fruits = ['banana', 'apple', 'cherry']
fruits.sort() # correct — modifies in place
# fruits = fruits.sort() # wrong — sets fruits to None
print(fruits)
# ['apple', 'banana', 'cherry']Listas Anidadas
Una lista puede contener otras listas como elementos, formando una estructura 2D (o más profunda):
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
]
print(matrix[0]) # [1, 2, 3]
print(matrix[1][2]) # 6 — row 1, column 2Las listas anidadas se usan comúnmente para representar cuadrículas, tablas y matrices.
Comprensiones de Listas
Una comprensión de lista es una expresión concisa de una sola línea para construir una nueva lista transformando o filtrando un iterable existente. La sintaxis es:
[expression for item in iterable if condition]La parte if condition es opcional.
Cuadrados del 1 al 10:
Solo números pares:
evens = [x for x in range(1, 11) if x % 2 == 0]
print(evens)
# [2, 4, 6, 8, 10]Transformar strings:
fruits = ['apple', 'banana', 'cherry']
upper = [f.upper() for f in fruits]
print(upper)
# ['APPLE', 'BANANA', 'CHERRY']Las comprensiones de listas son generalmente más rápidas que un bucle for equivalente con append(). Consulta Comprensión de Listas para patrones avanzados.
Desempaquetar Listas
Puedes asignar los elementos de una lista a variables individuales en un solo paso:
a, b, c = ['x', 'y', 'z']
print(a, b, c)
# x y zEl operador * (asterisco) captura cualquier número de elementos restantes:
first, *rest = [1, 2, 3, 4, 5]
print(first) # 1
print(rest) # [2, 3, 4, 5]El desempaquetado genera ValueError si el número de variables no coincide con el número de elementos (a menos que uses *).
Cuándo Usar una Lista
| Situación | Recomendación |
|---|---|
| Colección ordenada que cambia de tamaño | Lista |
| Colección fija que no debe cambiar | Tupla |
Prueba de pertenencia rápida (in) | Set |
| Mapeo clave-valor | Diccionario |
| Arrays numéricos grandes | numpy.array (third-party) |