Aprende leyendo en orden

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.

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