QuieroProgramar por Rodri Gonzalez
Python · Lección 13 de 27

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.

90–110 min Prerrequisitos: 08 Listas, 12 Métodos de strings
01

Concepto teórico

sort() vs sorted() — la diferencia más importante

Esta es probablemente la fuente de bugs más común con listas:

Ambas aceptan dos parámetros opcionales: key (función que transforma cada elemento para comparar) y reverse=True (orden descendente).

Bug clásico: 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
Regla mnemotécnica: los métodos que MODIFICAN la lista devuelven 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:

Tip profesional: 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á:

En pandas: 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.
02

Ejemplos explicados paso a paso

Ejemplo 1: sort() vs sorted() en acción

ejemplo_01_sort.pyPython

        
Hacé clic en ▶ Ejecutar

Ejemplo 2: append, extend, insert — construir listas dinámicamente

ejemplo_02_construir.pyPython

        
Hacé clic en ▶ Ejecutar

Ejemplo 3: enumerate y zip — los aliados del for

ejemplo_03_enumerate_zip.pyPython

        
Hacé clic en ▶ Ejecutar

Ejemplo 4: map() y filter() — programación funcional

ejemplo_04_map_filter.pyPython

        
Hacé clic en ▶ Ejecutar

Ejemplo 5: Comprehensions avanzadas

ejemplo_05_comp_avanzada.pyPython

        
Hacé clic en ▶ Ejecutar
03

Referencia rápida

Método/Función Modifica original? Devuelve Cuándo usar
.sort() None No necesitás la original
sorted() No Nueva lista Necesitás mantener original (90% de los casos)
.append(x) None Agregar un elemento al final
.extend(iter) None Agregar TODOS los elementos de otro iterable
.insert(i, x) None Agregar en posición específica
.pop(i) Elemento Eliminar y usar el valor
.remove(x) 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
04

Ejercicios

Nivel 1 · Básico

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.

ejercicio_01.pyDebe incluir "[91000"

          
Hacé clic en ▶ Ejecutar
Nivel 1 · Básico

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.

ejercicio_02.pyDebe incluir "20"

          
Hacé clic en ▶ Ejecutar
Nivel 1 · Básico

Ejercicio 3: enumerate para numeración

Dada productos = ["Notebook", "Mouse", "Teclado", "Monitor"], imprimilos numerados empezando en 1 usando enumerate. Debe incluir 3. Teclado.

ejercicio_03.pyDebe incluir "3. Teclado"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

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.

ejercicio_04.pyDebe incluir "320000"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

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.

ejercicio_05.pyDebe incluir "Bajo"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

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.

ejercicio_06.pyDebe incluir "Pérez"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

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.

ejercicio_07.pyDebe incluir "1482000"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

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.

ejercicio_08.pyDebe incluir "16700"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

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

ejercicio_09.pyDebe incluir "Total:"

          
Hacé clic en ▶ Ejecutar
Nivel 4 · Desafío

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.

ejercicio_10_desafio.pyDebe incluir "Top 3"

          
Hacé clic en ▶ Ejecutar
05

Resumen y conexión

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