Menu

Listas en Python: cómo crear, indexar, añadir, ordenar e iterar

Un recorrido práctico por las listas de Python — la colección más común — cubriendo creación, indexación, slicing, append, sort y los patrones a los que más recurrirás.

Las listas son secuencias ordenadas y mutables

La lista es el tipo de colección más usado en Python. Si estás guardando un conjunto ordenado de valores que podría cambiar — añadir, quitar, ordenar, actualizar — una lista es casi siempre la elección correcta.

Creas una con corchetes:

main.py
Output
Click Run to see the output here.

Las listas pueden contener cualquier cosa, incluso otras listas. En la práctica, la mayoría de listas acaban conteniendo un tipo de cosa — una lista de usuarios, una lista de números — porque es lo más fácil sobre lo que razonar.

Indexar

Cada elemento tiene una posición, empezando en 0. Accede con corchetes:

main.py
Output
Click Run to see the output here.

Pedir un índice que no existe lanza IndexError. Si puedes estar fuera de rango, o comprueba la longitud primero o envuelve el acceso en un try.

Slicing

El slicing te da un rango de elementos. La sintaxis es list[start:stop:step], la misma que los strings:

main.py
Output
Click Run to see the output here.

Dos cosas que vale la pena dejar fijas:

  • El slicing siempre devuelve una nueva lista. Modificar el slice no afecta al original.
  • El índice stop es exclusivo — nums[2:5] da los índices 2, 3 y 4, no el 5.

Cómo añadir con append, extend e insert

Los tres métodos para "añadir a una lista" hacen cosas distintas, y confundirlos es una fuente común de bugs:

main.py
Output
Click Run to see the output here.
  • append(x) añade x como un solo elemento — incluso si x es una lista. items.append([1, 2]) añade la lista en sí como una entrada.
  • extend(iterable) añade cada elemento del iterable. items.extend([1, 2]) añade dos entradas.
  • insert(i, x) inserta en un índice concreto, desplazando todo en o después de i una posición a la derecha.

+= con una lista a la derecha funciona como extend:

main.py
Output
Click Run to see the output here.

Y para quitar:

main.py
Output
Click Run to see the output here.

Si intentas hacer remove() de algo que no está en la lista, Python lanza ValueError. Si necesitas "quítalo si está", o comprueba con in primero o usa un try.

También puedes borrar por índice con del:

main.py
Output
Click Run to see the output here.

Longitud, pertenencia, conteo

main.py
Output
Click Run to see the output here.

in es la forma legible de comprobar si una lista contiene un valor. Si vas a hacer esa pregunta muchas veces sobre una lista grande, usa un set en su lugar — la pertenencia a un set es O(1) mientras que a una lista es O(n).

Ordenar

Dos formas, y la elección importa:

main.py
Output
Click Run to see the output here.

Ambos aceptan reverse=True para orden descendente:

main.py
Output
Click Run to see the output here.

Y una función key para orden personalizado:

main.py
Output
Click Run to see the output here.

key se aplica a cada elemento, y el resultado es lo que se compara. Casos habituales: ordenar por longitud, por un atributo específico o por la forma en minúsculas de un string.

Invertir

Tres sabores, según lo que necesites:

main.py
Output
Click Run to see the output here.

Usa la versión in-place cuando no necesites el original. Usa slicing cuando quieras una copia nueva. Usa reversed() cuando solo necesites iterar al revés sin materializar una nueva lista.

La trampa de la referencia compartida

Las listas son mutables, y las variables son referencias. Eso significa que dos variables pueden apuntar a la misma lista:

main.py
Output
Click Run to see the output here.

b = a no copió la lista; hizo a b un segundo nombre para la misma lista. Si quieres una copia, pídela:

main.py
Output
Click Run to see the output here.

Esto muerde a cada programador de Python al menos una vez. Recuerda: = entre dos listas no copia.

Iterar y construir

Ya conoces el patrón básico de la página del bucle for:

main.py
Output
Click Run to see the output here.

Eso es legible y siempre estará bien. Cuando estés cómodo, el equivalente con list comprehension hace lo mismo en una línea:

main.py
Output
Click Run to see the output here.

Cubriremos las comprehensions en detalle dos páginas más adelante.

Una chuleta rápida

Métodos que vale la pena conocer, de un vistazo:

  • append(x) — añade al final
  • extend(iter) — añade cada elemento de un iterable
  • insert(i, x) — inserta en el índice i
  • pop() / pop(i) — quita y devuelve
  • remove(x) — quita la primera aparición de x
  • sort() / sort(key=...) / sort(reverse=True)
  • reverse()
  • index(x) — posición del primer x
  • count(x) — número de x's
  • copy() — copia superficial

Siguiente

Las listas son el caballo de batalla. A continuación veremos las tuplas — su prima inmutable — y cuándo recurrir a una tupla en su lugar es la mejor opción.

Preguntas frecuentes

¿Cómo creo una lista en Python?

Usa corchetes con valores separados por comas: fruits = ['apple', 'banana', 'cherry']. Las listas pueden contener cualquier tipo, y puedes mezclar tipos en la misma lista, aunque la mayoría de listas reales son homogéneas por costumbre.

¿Cómo ordeno una lista en Python?

Llama a .sort() sobre la lista para ordenarla en el sitio, o usa la función incorporada sorted(list) para obtener una nueva lista ordenada sin cambiar la original. Ambos aceptan un flag reverse=True para orden descendente y un argumento key= para claves de ordenación personalizadas.

¿Cómo invierto una lista en Python?

list.reverse() invierte en el sitio. list[::-1] devuelve una nueva lista invertida. reversed(list) devuelve un iterador sobre el que puedes hacer bucle. Elige el que encaje con lo que necesites: en el sitio vs. copia nueva vs. iteración perezosa.

Aprende a programar con Coddy

COMENZAR