Aprende leyendo en orden

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.

El contenido de una lista y sus índices
102030400123

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.

Trabajemos con una lista de la compra de frutas.

① Crea fruits = ["apple", "banana", "grape", "lemon"] y luego muestra con print() el primer y el último elemento.

② Reemplaza fruits[1] por "orange" y muestra la lista completa con print().

Editor Python

Ejecutar el código para ver el resultado

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.

Cómo funciona el slicing
[1,2,3,4,5][:3][1, 2, 3]3 primeros[1,2,3,4,5][-2:][4, 5]2 últimoscortartomarcortartomar

[: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]

Tienes scores = [72, 85, 91, 68, 77, 95].

① Usa un slice para extraer los 3 primeros ([72, 85, 91]) y muéstralos.

② Usa un slice para extraer los 2 últimos ([77, 95]) y muéstralos.

Editor Python

Ejecutar el código para ver el resultado

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étodoQué 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 vs extend
[1, 2, 3].append([4, 5])[1,2,3,[4,5]]anidado[1, 2, 3].extend([4, 5])[1,2,3,4,5]planollamarresultadollamarresultado

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.

Editemos una lista de tareas.

Partes de todo = ["compras", "gimnasio"].

① Usa append para añadir "lectura" al final.

② Usa extend para añadir ["caminar", "estudiar"] al final de una vez.

③ Usa insert para colocar "desayuno" al principio.

④ Usa remove para eliminar "gimnasio" y luego muestra la lista final con print().

Editor Python

Ejecutar el código para ver el resultado

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(...))

Modifica vs devuelve
sort()reverse()list.sort()(sin retorno)la listacambiacount()index()n = list.count(x)capturarel resultadousoefecto lateralusoretorno

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".

Analicemos una lista de notas de un examen: scores = [72, 85, 91, 68, 77, 95, 85].

① Usa sort() para ordenar de forma ascendente y luego muestra la lista ordenada con print().

② Usa count() para mostrar con print() cuántas personas sacaron un 85.

Editor Python

Ejecutar el código para ver el resultado

En este artículo cubrimos cómo crear listas y acceder a ellas, el slicing, añadir y eliminar elementos, y ordenar y buscar.

QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1Dado nums = [10, 20, 30], ¿qué contendrá nums después de ejecutar nums.append([40, 50])?

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:]?