Cargando tu progreso…

Pokédex Codex

Python: Listas y Colecciones

META

🎯 Meta: guardar muchos datos juntos. Hasta ahora cada variable guardaba UNA cosa. Ahora vas a manejar equipos enteros, Pokédex completas y mucho más.


🎮 Analogía: tu equipo Pokémon

Un Entrenador no lleva un solo Pokémon: lleva un equipo (hasta 6). Una lista es justamente eso: una colección ordenada de cosas guardadas bajo un solo nombre. ⚾⚾⚾


📋 Listas: colección ordenada y modificable

Una lista se escribe entre corchetes [], con los elementos separados por comas.

equipo = ["Pikachu", "Charizard", "Snorlax"]
niveles = [25, 50, 40]
mezcla = ["Pikachu", 25, True]   # puede tener tipos distintos
vacia = []                        # una lista vacía

Acceder por índice

Cada elemento tiene una posición (índice). ¡Empieza en 0!

equipo = ["Pikachu", "Charizard", "Snorlax"]
print(equipo[0])    # Pikachu  (el primero)
print(equipo[1])    # Charizard
print(equipo[-1])   # Snorlax  (el último, contando desde atrás)

Modificar

equipo[0] = "Raichu"     # cambiamos el primero (Pikachu evolucionó)
print(equipo)            # ['Raichu', 'Charizard', 'Snorlax']

🔧 Métodos de listas (las acciones de tu equipo)

equipo = ["Pikachu", "Charizard"]

equipo.append("Snorlax")     # agrega al final → ['Pikachu','Charizard','Snorlax']
equipo.insert(0, "Mewtwo")   # inserta en una posición
equipo.remove("Charizard")   # borra por valor
ultimo = equipo.pop()        # saca y devuelve el último
print(len(equipo))           # cantidad de elementos
print("Pikachu" in equipo)   # ¿está? → True o False
equipo.sort()                # ordena la lista
equipo.reverse()             # la da vuelta
MétodoQué hace
.append(x)Agrega x al final
.insert(i, x)Inserta x en la posición i
.remove(x)Borra la primera aparición de x
.pop()Saca y devuelve el último
len(lista)Cantidad de elementos
x in lista¿x está en la lista?
.sort()Ordena
.reverse()Invierte el orden

P: Tenés `equipo = ["Pikachu", "Charizard", "Snorlax"]`. ¿Qué devuelve `equipo[-1]`?
- "Pikachu"
- "Charizard"
+ "Snorlax"
> El índice `-1` accede al último elemento de la lista, contando desde atrás. `-2` sería "Charizard".

📌 Tuplas: colección que NO se modifica

Una tupla es como una lista, pero inmutable (no se puede cambiar). Se escribe con paréntesis (). Sirve para datos fijos.

coordenada = (10, 20)         # una posición que no debería cambiar
tipos_pikachu = ("Electrico",)  # tupla de un solo elemento (ojo a la coma)

print(coordenada[0])    # 10
# coordenada[0] = 5     # ❌ ERROR: una tupla no se puede modificar
TIP

💡 Usá tupla cuando los datos NO deberían cambiar (como las coordenadas de un punto). Usá lista cuando sí (como tu equipo, que cambia).


🎯 Sets: colección SIN duplicados

Un set (conjunto) guarda elementos únicos, sin orden y sin repetidos. Se escribe con llaves {}.

tipos_vistos = {"Fuego", "Agua", "Fuego", "Planta"}
print(tipos_vistos)    # {'Fuego', 'Agua', 'Planta'}  (el Fuego repetido desaparece)

tipos_vistos.add("Electrico")    # agregar
print("Agua" in tipos_vistos)    # True

Útil para sacar duplicados de una lista:

capturados = ["Pikachu", "Pidgey", "Pikachu", "Rattata"]
unicos = set(capturados)
print(len(unicos))    # 3 (sin contar el Pikachu repetido)

🗂️ Diccionarios: pares clave → valor

Un diccionario guarda pares de clave: valor. Es como una Pokédex de verdad: buscás por nombre y obtenés los datos. Se escribe con llaves {}.

pikachu = {
    "nombre": "Pikachu",
    "tipo": "Electrico",
    "nivel": 25,
    "hp": 100,
}

print(pikachu["nombre"])    # Pikachu  (accedés por la clave)
print(pikachu["nivel"])     # 25

Modificar y agregar

pikachu["nivel"] = 26           # cambiar un valor
pikachu["ataque"] = 55          # agregar una clave nueva
print(pikachu.get("defensa", 0))  # .get() devuelve un default si la clave no está

Recorrer un diccionario

for clave in pikachu:
    print(clave, "->", pikachu[clave])

# O directamente clave y valor con .items()
for clave, valor in pikachu.items():
    print(f"{clave}: {valor}")
OperaciónCómo
Accederdic["clave"]
Acceso segurodic.get("clave", default)
Agregar/cambiardic["clave"] = valor
Borrardel dic["clave"]
¿Existe la clave?"clave" in dic
Recorrerfor k, v in dic.items():

P: ¿Cuál es la diferencia principal entre una lista `[]` y un set `{}`?
- La lista usa llaves y el set corchetes
- El set es más rápido para todo
+ El set no guarda duplicados y no tiene orden
> El set descarta los repetidos automáticamente y no garantiza ningún orden. La lista sí mantiene duplicados y el orden en que los agregaste.

✨ Comprensiones de listas: crear listas en una línea

Una comprensión arma una lista nueva a partir de otra, en una sola línea. Es elegante y muy “pythónico”.

niveles = [25, 50, 40, 15]

# Forma larga:
dobles = []
for n in niveles:
    dobles.append(n * 2)

# Comprensión (la misma cosa, en una línea):
dobles = [n * 2 for n in niveles]
print(dobles)    # [50, 100, 80, 30]

# Con condición (filtrar):
altos = [n for n in niveles if n >= 40]
print(altos)     # [50, 40]

Estructura: [expresión for elemento in coleccion if condición].


🔁 enumerate y zip

enumerate: índice + valor a la vez

equipo = ["Pikachu", "Charizard", "Snorlax"]

for indice, pokemon in enumerate(equipo):
    print(f"{indice + 1}. {pokemon}")
# 1. Pikachu
# 2. Charizard
# 3. Snorlax

zip: recorrer dos listas en paralelo

nombres = ["Pikachu", "Charizard"]
niveles = [25, 50]

for nombre, nivel in zip(nombres, niveles):
    print(f"{nombre} es nivel {nivel}")
# Pikachu es nivel 25
# Charizard es nivel 50

📝 Resumen

# Lista: ordenada y modificable
equipo = ["Pikachu", "Charizard"]
equipo.append("Snorlax")

# Tupla: inmutable
punto = (10, 20)

# Set: sin duplicados
tipos = {"Fuego", "Agua"}

# Diccionario: clave -> valor
pikachu = {"nombre": "Pikachu", "nivel": 25}

# Comprensión: lista en una línea
dobles = [n * 2 for n in [1, 2, 3]]

# enumerate y zip
for i, p in enumerate(equipo): ...
for n, l in zip(nombres, niveles): ...
ColecciónSímboloCaracterística
Lista[]Ordenada, modificable
Tupla()Ordenada, inmutable
Set{}Única, sin orden
Diccionario{clave: valor}Pares clave-valor

➡️ ¿Y ahora qué?

Ahora practicá: andá a los ejercicios de este tema y resolvelos. Se corrigen al instante con tests reales en tu navegador. 💪

ÁNIMO

“Un buen Entrenador conoce a cada miembro de su equipo. Un buen programador conoce sus estructuras de datos.”