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:
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:
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:
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:
append(x)añadexcomo un solo elemento — incluso sixes 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 deiuna posición a la derecha.
+= con una lista a la derecha funciona como extend:
Y para quitar:
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:
Longitud, pertenencia, conteo
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:
Ambos aceptan reverse=True para orden descendente:
Y una función key para orden personalizado:
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:
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:
b = a no copió la lista; hizo a b un segundo nombre para la misma lista. Si quieres una copia, pídela:
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:
Eso es legible y siempre estará bien. Cuando estés cómodo, el equivalente con list comprehension hace lo mismo en una línea:
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 finalextend(iter)— añade cada elemento de un iterableinsert(i, x)— inserta en el índice ipop()/pop(i)— quita y devuelveremove(x)— quita la primera aparición de xsort()/sort(key=...)/sort(reverse=True)reverse()index(x)— posición del primer xcount(x)— número de x'scopy()— 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.