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)
Aprende el tipo list de Python: declaraciones, indexación, slicing y los métodos esenciales para añadir, quitar y ordenar.
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:]?