σμ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 AcademyRoteiros
Ctrl K
AO
+1,2 mil alunos
EntrarParticipar ↗
Roteiros
AO
+1,2 mil alunos
Entrar
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Roteiro de Python›Módulo 1 · Fundamentos de Python para quants›Tópico 1.12·~40 minIniciante

Listas

Posição no roteiroMódulo 1 de 11 · Tópico 12 de 33
1.12 Listas
—Nota do lab— / 100XP total—Sequência—

Uma coleção ordenada que você pode alterar

Uma lista guarda valores em ordem entre colchetes: [184.0, 185.5, 183.2]. Pode conter quaisquer valores, e len(prices) diz quantos há. Cada item tem uma posição chamada índice, contada a partir de 0. Um índice negativo conta a partir do fim, então -1 é o último item. Pedir uma posição que não existe gera um 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]

Fatiamento: uma parte da lista

prices[start:stop] dá uma nova lista de start até stop, sem incluí-lo. Se omitir uma ponta, vai até ela: prices[:3] são os três primeiros, prices[-3:] os três últimos. Uma fatia nunca dá erro por passar do limite, apenas para no fim. Uma armadilha: -0 é igual a 0, então prices[-0:] é a lista inteira, não uma vazia.

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

Adicionar e remover

append(x) adiciona um item ao fim, extend(items) adiciona vários e insert(i, x) coloca um na posição i. pop() remove e devolve o último item (pop(i) o da posição i) e remove(x) apaga o primeiro item igual a x. Esses métodos alteram a lista no lugar e devolvem None, então prices = prices.append(1) deixa prices como None. Somar com + constrói uma nova lista.

# 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

Há duas formas de ordenar. prices.sort() reordena a lista no lugar e devolve None. sorted(prices) deixa o original intacto e devolve uma lista ordenada nova; também aceita qualquer iterável. Ambas aceitam reverse=True para o maior primeiro e key=... para ordenar por outra coisa, como key=len. Prefira sorted quando outro código ainda puder usar a ordem 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]

Dois nomes, uma lista

backup = prices não copia a lista: os dois nomes apontam para o mesmo objeto, então mudar um muda o outro. Faça uma cópia real (rasa) com prices.copy(), list(prices) ou a fatia prices[:]. O mesmo vale para funções: uma função que chama .append, .sort ou .pop no seu argumento altera também a lista de quem a chamou, o que raramente é esperado.

# 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]
Devolva uma nova lista, não surpreenda quem chamaUma função que recebe uma lista normalmente deve deixá-la como a encontrou e devolver uma nova. Use sorted(...), fatias e comprehensions, que constroem listas novas. Os labs verificam que a lista recebida continua inalterada.
  • items[i], items[-1]: um item; items[a:b]: uma nova lista.
  • append, extend, insert, pop, remove alteram a lista e não devolvem nada útil.
  • sorted(items) cria uma nova lista ordenada; items.sort() reordena no lugar.

A seguir: tuplas e desempacotamento, a irmã de tamanho fixo da lista e uma forma limpa de separar valores.

Lab: o que é avaliado

  • Escolher os maiores preços com top_n25 pts
  • Pegar os valores mais recentes com last_n25 pts
  • Calcular a média de cada janela de preços com moving_average25 pts
  • Mover valores de uma ponta à outra com rotate25 pts
Explorador · lab-12-1
▾ lab-12-1
…
bash · no navegador
learner@quantcraft:~/lab-12-1$
Python ainda não carregadoPythonLn 1, Col 1Spaces: 4UTF-8

Redefinir este tópico?

Tudo em lab-12-1 volta aos arquivos iniciais e o terminal é limpo. Sua solução atual será perdida — isso não pode ser desfeito.

Será redefinido
  • main.py → código inicial
  • Histórico do terminal e saída dos testes
  • Alterações não enviadas
Será mantido
  • Melhor nota do lab
  • Seu XP e sua sequência
  • Progresso da aula e anotações

Entre para executar o seu código.

Todas as aulas são gratuitas para ler. Crie uma conta ou entre para executar código, rodar os testes e enviar este lab.

  • IDE no navegador com terminal bash — nada para instalar
  • Correção instantânea, XP e o seu lugar no roteiro
Criar uma contaEntrar
OU
Continuar com o GitHub