Listas en Python
Las listas son colecciones ordenadas y modificables. Son el equivalente de los arrays en otros lenguajes — pero mucho más poderosas.
¿Qué es una Lista?
Una lista guarda múltiples valores en una sola variable, en un orden específico. Pueden contener cualquier tipo de dato, e incluso mezclarlos.
frutas = ["manzana", "naranja", "uva"]
numeros = [1, 2, 3, 4, 5]
mixta = ["Ana", 28, True, 3.14]
vacia = []
print(frutas) # ['manzana', 'naranja', 'uva']
print(len(frutas)) # 3
Las listas se definen con [] y pueden modificarse. Los strings se definen con "" y son inmutables. Ambas soportan indexing y slicing de la misma manera.
Acceder a elementos
Igual que los strings, las listas usan índices empezando desde 0.
frutas = ["manzana", "naranja", "uva", "pera", "kiwi"]
# [0] [1] [2] [3] [4]
# [-5] [-4] [-3] [-2] [-1]
print(frutas[0]) # "manzana"
print(frutas[-1]) # "kiwi" — último elemento
print(frutas[1:3]) # ["naranja", "uva"] — slicing
print(frutas[:2]) # ["manzana", "naranja"]
print(frutas[2:]) # ["uva", "pera", "kiwi"]
frutas[0] = "melón" funciona perfectamente — reemplaza "manzana" por "melón".
Métodos para agregar y quitar elementos
Agregar
frutas = ["manzana", "naranja"]
frutas.append("uva") # agrega al final → [..., "uva"]
frutas.insert(1, "kiwi") # inserta en posición 1 → ["manzana", "kiwi", "naranja", "uva"]
frutas.extend(["pera", "mango"]) # agrega varios al final
print(frutas)
Quitar
frutas = ["manzana", "naranja", "uva", "naranja"]
frutas.remove("naranja") # quita la PRIMERA ocurrencia
print(frutas) # ["manzana", "uva", "naranja"]
eliminado = frutas.pop() # quita y devuelve el último
print(eliminado) # "naranja"
eliminado = frutas.pop(0) # quita y devuelve el de posición 0
print(eliminado) # "manzana"
frutas.clear() # vacía toda la lista
remove(valor) busca por valor. pop(índice) quita por posición y devuelve el elemento. Si no encontrás el valor con remove(), Python lanza un ValueError.
Ordenar y organizar
numeros = [3, 1, 4, 1, 5, 9, 2, 6]
nombres = ["Carlos", "Ana", "Beatriz", "Diego"]
# sort() — modifica la lista original
numeros.sort() # [1, 1, 2, 3, 4, 5, 6, 9]
numeros.sort(reverse=True) # [9, 6, 5, 4, 3, 2, 1, 1]
nombres.sort() # ['Ana', 'Beatriz', 'Carlos', 'Diego']
# sorted() — devuelve una lista nueva, no modifica la original
original = [3, 1, 4, 1, 5]
nueva = sorted(original)
print(original) # [3, 1, 4, 1, 5] — sin cambios
print(nueva) # [1, 1, 3, 4, 5]
# reverse() — invierte el orden (no ordena)
numeros.reverse()
# Otras operaciones útiles
print(min(numeros)) # el menor
print(max(numeros)) # el mayor
print(sum(numeros)) # suma total
Recorrer listas con for
frutas = ["manzana", "naranja", "uva"]
# Iterar directamente
for fruta in frutas:
print(fruta)
print()
# Con enumerate() — también obtenés el índice
for i, fruta in enumerate(frutas):
print(f"{i}: {fruta}")
print()
# enumerate() con índice personalizado
for i, fruta in enumerate(frutas, 1):
print(f"{i}. {fruta}")
List comprehension — la forma pythónica
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# Forma tradicional
pares = []
for n in numeros:
if n % 2 == 0:
pares.append(n)
# List comprehension — equivalente, más conciso
pares = [n for n in numeros if n % 2 == 0]
print(pares) # [2, 4, 6, 8, 10]
# Con transformación
cuadrados = [n ** 2 for n in numeros]
print(cuadrados) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# Mayúsculas de frutas que tengan más de 5 letras
frutas = ["manzana", "uva", "naranja", "kiwi", "banana"]
largas = [f.upper() for f in frutas if len(f) > 5]
print(largas) # ['MANZANA', 'NARANJA', 'BANANA']
Probá el Ejemplo 3: Recorrer y list comprehension
Métodos útiles
append(x)
lista.append(5)
Agrega al final
insert(i, x)
lista.insert(0, 5)
Inserta en posición i
remove(x)
lista.remove(5)
Quita la primera ocurrencia
pop(i)
lista.pop()
Quita y devuelve el último (o el de posición i)
index(x)
lista.index(5)
Posición de la primera ocurrencia
count(x)
lista.count(5)
Cuántas veces aparece x
sort()
lista.sort()
Ordena la lista en su lugar
copy()
copia = lista.copy()
Crea una copia independiente
Ejemplo Completo
Sistema de gestión de tareas con listas:
tareas = []
def agregar(tarea):
tareas.append({"tarea": tarea, "hecha": False})
print(f"✓ Agregada: {tarea}")
def completar(indice):
if 0 <= indice < len(tareas):
tareas[indice]["hecha"] = True
print(f"✓ Completada: {tareas[indice]['tarea']}")
def mostrar():
print("\n--- TAREAS ---")
for i, t in enumerate(tareas):
estado = "✅" if t["hecha"] else "⬜"
print(f"{estado} {i+1}. {t['tarea']}")
pendientes = sum(1 for t in tareas if not t["hecha"])
print(f"\n{pendientes} tarea(s) pendiente(s)")
agregar("Estudiar Python")
agregar("Hacer ejercicio")
agregar("Leer un libro")
completar(0)
mostrar()
Probá el Ejemplo 4: Gestor de tareas
Buenas Prácticas
- Usá list comprehension para crear listas a partir de otras — es más legible y más rápido
- copy() para copiar —
lista2 = lista1no copia, crea otra referencia al mismo objeto - in para verificar existencia —
if "manzana" in frutases más claro queindex() - enumerate() en vez de range(len()) — más pythónico y legible
- sorted() si no querés modificar el original — sort() modifica en el lugar