Métodos de listas
En la lección 08 aprendiste a crear y acceder a listas. Ahora vas a dominar TODOS los métodos para modificarlas, ordenarlas, buscar en ellas y transformarlas con comprehensions avanzadas, enumerate, zip, map y filter.
Concepto teórico
sort() vs sorted() — la diferencia más importante
Esta es probablemente la fuente de bugs más común con listas:
lista.sort()— ordena la lista in-place (modifica la original) y devuelveNone. Si hacésresultado = lista.sort(), resultado esNoney tu lista original cambió.sorted(lista)— devuelve una nueva lista ordenada sin modificar la original. Esto es lo que querés el 90% de las veces.
Ambas aceptan dos parámetros opcionales: key (función que transforma cada elemento para comparar)
y reverse=True (orden descendente).
lista_ordenada = mi_lista.sort() →
lista_ordenada es None y mi_lista ya se modificó. Si querés una copia
ordenada sin tocar la original, usá sorted(mi_lista).
Métodos de modificación
| Método | Qué hace | Devuelve | Uso típico |
|---|---|---|---|
.append(x) |
Agrega x al final | None |
Acumular resultados en un loop |
.insert(i, x) |
Inserta x en posición i | None |
Agregar al inicio: .insert(0, x) |
.extend(iterable) |
Agrega todos los elementos del iterable | None |
Merge de dos listas |
.remove(x) |
Elimina primera ocurrencia de x | None |
Eliminar por valor (ValueError si no existe) |
.pop(i) |
Elimina y devuelve elemento en i | El elemento | Sin argumento: el último. Con índice: el específico |
.clear() |
Vacía la lista | None |
Resetear datos |
.reverse() |
Invierte in-place | None |
Invertir orden (también [::-1]) |
.sort() |
Ordena in-place | None |
Cuando no necesitás la original |
None (append, sort, reverse, remove, insert, extend, clear). Los que NO modifican devuelven un
valor (index, count, copy). Esta es una decisión de diseño de Python para evitar que encadenes operaciones
destructivas.
Métodos de consulta
| Método | Qué hace | Devuelve |
|---|---|---|
.index(x) |
Posición de la primera ocurrencia | int (ValueError si no existe) |
.count(x) |
Cuántas veces aparece x | int |
.copy() |
Copia superficial (shallow copy) | Nueva lista |
Copia superficial vs profunda
Cuando hacés b = a con listas, b no es una copia — es una referencia a la
misma lista. Si modificás b, a también cambia. Para una copia independiente necesitás
.copy() o list(a).
Pero cuidado: .copy() es superficial (shallow). Si la lista contiene listas anidadas, los
elementos internos siguen siendo referencias. Para una copia 100% independiente de estructuras anidadas,
necesitás import copy; copy.deepcopy(a).
Herramientas funcionales: enumerate, zip, map, filter
Python tiene funciones incorporadas que se combinan con listas para patrones muy potentes:
enumerate(lista, start=0)— devuelve pares (índice, elemento). Reemplaza el anti-patrónfor i in range(len(lista)).zip(lista1, lista2)— recorre dos listas en paralelo. Esencial para combinar datos relacionados.map(función, lista)— aplica una función a cada elemento. Similar a comprehension pero funcional.filter(función, lista)— filtra elementos que cumplen una condición.
enumerate() es la forma pythónica de obtener
índice + valor. NUNCA escribas for i in range(len(lista)): elemento = lista[i]. Escribí
for i, elemento in enumerate(lista):. Es más legible, más seguro y más rápido.
List comprehensions avanzadas
En la lección 08 viste el básico: [expr for x in lista if cond]. Ahora vamos más allá:
- Comprehension anidada:
[x for sublista in lista for x in sublista]— "aplanar" listas de listas - Con if/else:
[expr_true if cond else expr_false for x in lista]— transformar cada elemento condicionalmente - Múltiples condiciones:
[x for x in lista if cond1 and cond2]
df.apply(lambda x: ...) es la versión DataFrame de
map(). df[df["col"] > 100] es la versión de filter().
df.reset_index() te da algo similar a enumerate(). Todo lo que aprendés acá se
traslada directamente.
Ejemplos explicados paso a paso
Ejemplo 1: sort() vs sorted() en acción
Hacé clic en ▶ Ejecutar
Ejemplo 2: append, extend, insert — construir listas dinámicamente
Hacé clic en ▶ Ejecutar
Ejemplo 3: enumerate y zip — los aliados del for
Hacé clic en ▶ Ejecutar
Ejemplo 4: map() y filter() — programación funcional
Hacé clic en ▶ Ejecutar
Ejemplo 5: Comprehensions avanzadas
Hacé clic en ▶ Ejecutar
Referencia rápida
| Método/Función | Modifica original? | Devuelve | Cuándo usar |
|---|---|---|---|
.sort() |
Sí | None |
No necesitás la original |
sorted() |
No | Nueva lista | Necesitás mantener original (90% de los casos) |
.append(x) |
Sí | None |
Agregar un elemento al final |
.extend(iter) |
Sí | None |
Agregar TODOS los elementos de otro iterable |
.insert(i, x) |
Sí | None |
Agregar en posición específica |
.pop(i) |
Sí | Elemento | Eliminar y usar el valor |
.remove(x) |
Sí | None |
Eliminar por valor (error si no existe) |
enumerate() |
— | Iterador | Obtener índice + valor |
zip() |
— | Iterador | Recorrer listas en paralelo |
map(f, lista) |
— | Iterador | Aplicar función a cada elem |
filter(f, lista) |
— | Iterador | Filtrar por condición |
Ejercicios
Ejercicio 1: sorted() con reverse
Dada ventas = [45000, 72000, 38000, 91000, 55000], imprimí la lista ordenada de mayor a menor
SIN modificar la original. Debe incluir [91000.
Hacé clic en ▶ Ejecutar
Ejercicio 2: append para acumular
Empezá con pares = []. Recorré los números del 1 al 20 y agregá con .append() solo
los pares. Imprimí la lista. Debe incluir 20.
Hacé clic en ▶ Ejecutar
Ejercicio 3: enumerate para numeración
Dada productos = ["Notebook", "Mouse", "Teclado", "Monitor"], imprimilos numerados empezando en
1 usando enumerate. Debe incluir 3. Teclado.
Hacé clic en ▶ Ejecutar
Ejercicio 4: zip para combinar datos
Tenés nombres = ["García","López","Pérez"] y saldos = [150000, 320000, 890000].
Creeá un diccionario con dict(zip(...)) e imprimilo. Debe incluir 320000.
Hacé clic en ▶ Ejecutar
Ejercicio 5: Comprehension con if/else
Dada scores = [720, 590, 810, 645, 520, 750], creá una lista que tenga "Alto" si >=
700, "Medio" si >= 600, "Bajo" si no. Debe incluir Bajo.
Hacé clic en ▶ Ejecutar
Ejercicio 6: sorted con key lambda
Dada clientes = [("García",720), ("López",680), ("Pérez",810), ("Sosa",590)], ordenalos por
score (segundo elemento) de mayor a menor. Imprimí el top 1. Debe incluir Pérez.
Hacé clic en ▶ Ejecutar
Ejercicio 7: Aplanar lista de listas
Dada cuentas = [[150000, 5000], [320000], [45000, 890000, 72000]], aplaná en una sola lista y
calculá el total. Debe incluir 1482000.
Hacé clic en ▶ Ejecutar
Ejercicio 8: Pipeline con map y filter
Dada montos_str = ["$1,500", "$800", "$3,200", "$12,000", "$950"]: (1) limpiá símbolos con map,
(2) convertí a float, (3) filtrá > 1000. Imprimí la suma de los filtrados. Debe incluir 16700.
Hacé clic en ▶ Ejecutar
Ejercicio 9: Reporte con enumerate + zip + f-strings
Combina clientes = ["García","López","Pérez"], scores = [720,680,810] y
saldos = [150000,320000,890000] en un reporte numerado con emojis (🟢 score>=700, 🔴 si no). Debe
incluir Total:.
Hacé clic en ▶ Ejecutar
Ejercicio 10: Procesamiento completo de datos crudos
Tenés datos crudos de un CSV:
registros = ["García|720|$150,000", "López|680|$320,000", "Martínez|590|$45,000", "Pérez|810|$890,000"].
Procesá cada uno: (1) split, (2) convertir tipos, (3) crear lista de tuplas (nombre, score_int, saldo_float),
(4) ordená por saldo descendente, (5) imprimí top 3 con formato. Debe incluir Top 3.
Hacé clic en ▶ Ejecutar
Resumen y conexión
.sort()modifica in-place y devuelveNone.sorted()devuelve nueva lista sin modificar..append()agrega uno,.extend()agrega muchos,.insert(i, x)en posición específica.enumerate()reemplazarange(len()).zip()combina listas en paralelo.map()transforma,filter()filtra — pero las comprehensions son más pythónicas.- Comprehensions avanzadas:
[expr if cond else expr for x in lista]y[x for sub in lista for x in sub]. - Cuidado con las referencias:
b = aNO copia la lista. Usá.copy().
En la siguiente lección (14 · Métodos de diccionarios) vas a profundizar en los métodos de diccionarios: .setdefault(), .update() avanzado, defaultdict, Counter y patrones profesionales.
Recursos: Python docs — Lists · enumerate · zip