📋 Listas y Bucles

Las listas son la estructura de datos más usada en CodeWars. Almacenan múltiples valores y permiten recorrerlos, filtrarlos y transformarlos.

📦 Crear listas

📖 Del libro

Una lista es una colección de elementos en un orden particular. Se crean con corchetes [] y los elementos se separan por comas. Puedes poner cualquier tipo de dato en una lista.

→ Python Crash Course, Capítulo 3, pp. 33-35

# Lista vacía
lista = []

# Lista con valores
numeros = [1, 2, 3, 4, 5]
nombres = ["Ana", "Luis", "Eva"]

# Leer lista de números del input
nums = list(map(int, input().split()))

🔍 Acceder a elementos

📖 Del libro

Los índices empiezan en 0. Índices negativos cuentan desde el final: -1 es el último.

→ Python Crash Course, Capítulo 3, pp. 34-35

nums = [10, 20, 30, 40, 50]

nums[0]      # 10 (primero)
nums[-1]     # 50 (último)
nums[1:4]    # [20, 30, 40]
nums[::-1]   # [50, 40, 30, 20, 10] (invertir)

✏️ Modificar listas

lista = [1, 2, 3]

lista.append(4)          # [1, 2, 3, 4]
lista.insert(0, 0)       # [0, 1, 2, 3, 4]
lista.remove(2)          # [0, 1, 3, 4] (por valor)
lista.pop()              # devuelve 4, lista = [0, 1, 3]

📊 Funciones útiles

nums = [4, 1, 7, 3, 9]

len(nums)     # 5
sum(nums)     # 24
min(nums)     # 1
max(nums)     # 9
7 in nums     # True

🔀 Ordenar

📖 Del libro

sort() modifica la lista original, sorted() devuelve una nueva.

→ Python Crash Course, Capítulo 3, pp. 43-44

nums = [4, 1, 7, 3]

nums.sort()               # nums = [1, 3, 4, 7]
nums.sort(reverse=True)   # nums = [7, 4, 3, 1]

ordenada = sorted(nums)   # nueva lista, nums no cambia

🔁 Recorrer listas

# for básico
for fruta in frutas:
    print(fruta)

# con índice (enumerate)
for i, fruta in enumerate(frutas):
    print(f"{i}: {fruta}")

# dos listas a la vez (zip)
for nombre, edad in zip(nombres, edades):
    print(f"{nombre}: {edad}")

⚡ Comprensiones de lista

📖 Del libro

Crean listas en una línea: [expresión for elemento in lista if condición]

→ Python Crash Course, Capítulo 4, pp. 59-60

# Cuadrados
cuadrados = [x**2 for x in range(1, 6)]  # [1, 4, 9, 16, 25]

# Con condición
pares = [x for x in range(10) if x % 2 == 0]  # [0, 2, 4, 6, 8]

🎯 Patrones comunes

# Suma de elementos que cumplen condición
sum(x for x in nums if x > 0)

# Contar elementos
sum(1 for x in nums if x > 2)

# Posición del máximo
nums.index(max(nums))