σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft AcademyRutas
Ctrl K
AO
+1,2 k estudiantes
Iniciar sesiónUnirse ↗
Rutas
AO
+1,2 k estudiantes
Iniciar sesión
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Ruta de Python›Módulo 1 · Fundamentos de Python para quants›Tema 1.12·~40 minPrincipiante

Listas

Posición en la rutaMódulo 1 de 11 · Tema 12 de 33
1.12 Listas
—Puntuación del lab— / 100XP total—Racha—

Una colección ordenada que puedes modificar

Una lista guarda valores en orden entre corchetes: [184.0, 185.5, 183.2]. Puede contener cualquier valor, y len(prices) dice cuántos hay. Cada elemento tiene una posición llamada índice, contada desde 0. Un índice negativo cuenta desde el final, así que -1 es el último elemento. Pedir una posición que no existe lanza un IndexError.

prices = [184.0, 185.5, 183.2, 186.1]

# Reading by position
print(prices[0])    # 184.0
print(prices[-1])   # 186.1
print(len(prices))  # 4

# A list is changeable: assign to a position
prices[1] = 185.0
print(prices)       # [184.0, 185.0, 183.2, 186.1]

Segmentación: una parte de una lista

prices[start:stop] da una lista nueva desde start hasta stop sin incluirlo. Si omites un extremo, llega hasta ese lado: prices[:3] son los tres primeros, prices[-3:] los tres últimos. Una porción nunca da error por pasarse, simplemente se detiene al final. Una trampa: -0 es igual que 0, así que prices[-0:] es la lista entera, no una vacía.

prices = [184.0, 185.0, 183.2, 186.1, 187.4]

# Slices are new lists
print(prices[1:3])   # [185.0, 183.2]
print(prices[:2])    # [184.0, 185.0]
print(prices[-2:])   # [186.1, 187.4]

# Going past the end is fine, but -0 is not "none"
print(prices[3:99])  # [186.1, 187.4]
print(prices[-0:])   # the whole list

Añadir y quitar

append(x) añade un elemento al final, extend(items) añade varios e insert(i, x) pone uno en la posición i. pop() quita y devuelve el último elemento (pop(i) el de i) y remove(x) borra el primer elemento igual a x. Estos métodos modifican la lista en el sitio y devuelven None, así que prices = prices.append(1) deja prices en None. Sumar con + construye en cambio una lista nueva.

# Changing a list in place
fills = [100, 250]
fills.append(75)
fills.extend([40, 60])
print(fills)           # [100, 250, 75, 40, 60]

last = fills.pop()
fills.remove(250)
print(last, fills)     # 60 [100, 75, 40]

# + builds a new list and leaves the old ones alone
both = fills + [10]
print(both, fills)     # [100, 75, 40, 10] [100, 75, 40]

Ordenar

Hay dos formas de ordenar. prices.sort() reordena la lista en el sitio y devuelve None. sorted(prices) deja el original intacto y devuelve una lista ordenada nueva; además acepta cualquier iterable. Ambas admiten reverse=True para el mayor primero y key=... para ordenar por otra cosa, como key=len. Prefiere sorted cuando otro código aún pueda usar el orden original.

# sorted() returns a new list, sort() changes the old one
prices = [185.0, 183.2, 187.4, 184.0]

ranked = sorted(prices, reverse=True)
print(ranked)      # [187.4, 185.0, 184.0, 183.2]
print(prices)      # [185.0, 183.2, 187.4, 184.0] (unchanged)

prices.sort()
print(prices)      # [183.2, 184.0, 185.0, 187.4]

Dos nombres, una lista

backup = prices no copia la lista: ambos nombres apuntan al mismo objeto, así que cambiar uno cambia el otro. Haz una copia real (superficial) con prices.copy(), list(prices) o la porción prices[:]. Lo mismo vale para las funciones: una función que llama a .append, .sort o .pop sobre su argumento cambia también la lista de quien la llamó, lo que rara vez esperaba.

# A second name is not a copy
prices = [184.0, 185.0]
alias = prices
alias.append(186.0)
print(prices)   # [184.0, 185.0, 186.0]

# A real copy is independent
backup = list(prices)
backup.append(187.0)
print(prices)   # [184.0, 185.0, 186.0]
print(backup)   # [184.0, 185.0, 186.0, 187.0]
Devuelve una lista nueva, no sorprendas a quien llamaUna función que recibe una lista normalmente debería dejarla como la encontró y devolver una nueva. Usa sorted(...), porciones y comprensiones, que construyen listas nuevas. Los labs comprueban que la lista recibida queda sin cambios.
  • items[i], items[-1]: un elemento; items[a:b]: una lista nueva.
  • append, extend, insert, pop, remove cambian la lista y no devuelven nada útil.
  • sorted(items) construye una lista ordenada nueva; items.sort() reordena en el sitio.

A continuación: tuplas y desempaquetado, la hermana de tamaño fijo de la lista y una forma limpia de separar valores.

Lab: qué se califica

  • Elegir los precios más altos con top_n25 pts
  • Tomar los valores más recientes con last_n25 pts
  • Promediar cada ventana de precios con moving_average25 pts
  • Mover valores de un extremo a otro con rotate25 pts
Explorador · lab-12-1
▾ lab-12-1
…
bash · en el navegador
learner@quantcraft:~/lab-12-1$
Python aún no cargadoPythonLn 1, Col 1Spaces: 4UTF-8

¿Restablecer este tema?

Todo lo que hay en lab-12-1 vuelve a los archivos iniciales y se limpia el terminal. Tu solución actual se perderá: no se puede deshacer.

Se restablecerá
  • main.py → código inicial
  • Historial del terminal y salida de pruebas
  • Cambios sin enviar
Se conservará
  • Mejor puntuación del lab
  • Tu XP y tu racha
  • Progreso de la lección y notas

Inicia sesión para ejecutar tu código.

Todas las clases se pueden leer gratis. Crea una cuenta o inicia sesión para ejecutar código, lanzar las pruebas y enviar este lab.

  • IDE en el navegador con terminal bash — sin instalar nada
  • Corrección instantánea, XP y tu lugar en la ruta
Crear una cuentaIniciar sesión
O
Continuar con GitHub