Pregunta 1Dado nums = [10, 20, 30], ¿qué contendrá nums después de ejecutar nums.append([40, 50])?
Cómo usar las listas de Python (list)
Este artículo forma parte del Curso de Python, con el que dominarás desde cero las habilidades necesarias para usar Python, desde lo básico hasta lo avanzado.
Aprende el tipo list de Python desde la declaración con [ ]. Verás índices desde 0 y slicing, append / pop para añadir y quitar, y la diferencia entre sort que modifica y sorted que devuelve.
Crear una lista
Con una lista (list) puedes guardar varios valores juntos en un solo lugar. A diferencia de int o str, donde una variable guarda un único valor, una lista puede alinear cualquier cantidad de valores uno al lado del otro.
Para declararla, envuelves los valores entre [ y ], separados por comas.
Igual que con las cadenas, accedes a los elementos mediante un índice basado en 0. [0] te da el primero y [-1] te da el último.
Una característica clave de las listas es que puedes cambiar los valores después.
# Declarar una lista
numbers = [10, 20, 30, 40]
# Lista vacía (para rellenar más tarde)
empty = []
# Acceso
print(numbers[0]) # 10
print(numbers[-1]) # 40
# Sobrescribir
numbers[1] = 99
print(numbers) # [10, 99, 30, 40]
# Se pueden mezclar tipos
mixed = [1, "apple", 3.14, True]
print(mixed[1]) # apple
Listas anidadas (listas dentro de listas)
También puedes poner listas dentro de una lista, como [[1, 2], [3, 4]]. Para extraer un valor, encadenas dos índices como en data[1][0]. Es útil para datos en forma de tabla, pero con una lista plana te basta mientras estás empezando.
Slicing
Las listas usan la misma sintaxis de slicing que las cadenas. [inicio:fin] devuelve una sublista, [::paso] recorre la lista a saltos y [-n:] toma los últimos n elementos.
El resultado de un slice es una lista.
[:3] toma los 3 primeros (intervalo semiabierto, no incluye el final) y [-2:] toma los 2 últimos.
Funciona exactamente igual que el slicing de cadenas.
nums = [1, 2, 3, 4, 5]
print(nums[:3]) # [1, 2, 3]
print(nums[2:]) # [3, 4, 5]
print(nums[-2:]) # [4, 5]
print(nums[::2]) # [1, 3, 5] (uno sí, uno no)
# La lista original no cambia (se devuelve una nueva lista)
print(nums) # [1, 2, 3, 4, 5]
Añadir y eliminar elementos
Las listas incluyen muchos métodos para añadir o eliminar elementos. Estos métodos modifican la propia lista. Dicho de otro modo, llamar a list.append(...) modifica list en el sitio.
| Método | Qué hace |
|---|---|
| append(x) | Añade un elemento al final |
| extend(iterable) | Añade al final todos los elementos de otra lista |
| insert(i, x) | Inserta x en la posición i |
| remove(x) | Recorre desde la izquierda y elimina la primera coincidencia de x |
| pop(i) | Elimina el elemento en la posición i y lo devuelve (por defecto, el último) |
| clear() | Vacía toda la lista |
append añade "un elemento".
extend "desempaqueta y añade" cada elemento.
Incluso pasando el mismo [4, 5], el resultado es diferente.
box = [1, 2, 3]
# Añadir
box.append("apple") # añade uno al final
print(box) # [1, 2, 3, 'apple']
box.extend(["banana", "grape"]) # desempaqueta y añade al final
print(box) # [1, 2, 3, 'apple', 'banana', 'grape']
box.insert(1, "NEW") # inserta en el índice 1
print(box) # [1, 'NEW', 2, 3, 'apple', 'banana', 'grape']
# Eliminar
box.remove("apple") # elimina la primera coincidencia por valor
print(box) # [1, 'NEW', 2, 3, 'banana', 'grape']
v = box.pop(0) # extrae el índice 0 y lo devuelve
print(v) # 1
print(box) # ['NEW', 2, 3, 'banana', 'grape']
remove / pop sobre algo que no existe → error
remove(x) lanza ValueError si x no está en la lista, y pop(i) lanza IndexError si i está fuera de rango. Un patrón seguro es comprobar primero si existe con if x in box: antes de eliminar.
Ordenar y buscar (sort / reverse / count / index)
Las listas también tienen métodos para ordenar y buscar. Lo importante aquí es que hay dos tipos de métodos.
- Métodos que modifican la lista (sort / reverse) → no captures el valor devuelto; la propia lista cambia
- Métodos que devuelven un valor (count / index) → usa el valor devuelto, como en print(list.count(...))
sort / reverse: modifican la lista directamente. No captures el resultado.
count / index: no tocan la lista — devuelven un valor. Captúralo y úsalo.
fruits = ["banana", "lemon", "apple", "grape"]
# ① Métodos que modifican: la lista cambia con solo llamarlos
fruits.sort()
print(fruits) # ['apple', 'banana', 'grape', 'lemon']
fruits.reverse()
print(fruits) # ['lemon', 'grape', 'banana', 'apple']
# ② Métodos que devuelven: captura y usa el valor
nums = [1, 2, 2, 3, 2, 4]
print(nums.count(2)) # 3 (hay tres 2)
print(nums.index(3)) # 3 (el 3 es el 4.º elemento = índice 3)
Por qué print(fruits.sort()) imprime None
Un error habitual: escribir print(fruits.sort()) y ver que imprime None. sort() no devuelve un valor — ordena fruits en el sitio.
La solución correcta es llamar a fruits.sort() por sí solo y luego print(fruits) en la línea siguiente; divídelo en dos líneas.
Por cierto, los detalles sobre los valores de retorno (los valores que devuelven los métodos y las funciones) se tratarán en los artículos sobre funciones y programación orientada a objetos. Por ahora basta con recordar los dos patrones: "sort / reverse cambian la lista con solo ser llamados" y "count / index se capturan con = y luego se usan".
En este artículo cubrimos cómo crear listas y acceder a ellas, el slicing, añadir y eliminar elementos, y ordenar y buscar.
Verificación de conocimientos
Responde cada pregunta una a una.
Pregunta 2Dado items = [3, 1, 4, 1, 5], ¿qué imprime print(items.sort())?
Pregunta 3Dado data = [10, 20, 30, 40], ¿cuál es el resultado de data[-2:]?