σμ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 AcademyParcours
Ctrl K
AO
+1,2 k apprenants
ConnexionRejoindre ↗
Parcours
AO
+1,2 k apprenants
Connexion
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Parcours Python›Module 1 · Les bases de Python pour les quants›Sujet 1.13·~30 minDébutant

Tuples et déballage

Position dans le parcoursModule 1 sur 11 · Sujet 13 sur 33
1.13 Tuples et déballage
—Score du lab— / 100XP total—Série—

Un groupe fixe de valeurs

Un tuple ressemble à une liste qui ne peut plus changer après sa création. On le crée avec des virgules, généralement entre parenthèses : ("AAPL", 184.25, 184.5). Il convient à un petit enregistrement dont les parties ont un sens fixe, comme une cotation ou une transaction. On le lit par indice comme une liste, mais assigner à une position lève une TypeError. Un tuple d'un élément exige une virgule finale, (5,), car (5) n'est que le nombre 5.

quote = ("AAPL", 184.25, 184.5)

# Reading works like a list
print(quote[0], len(quote))  # AAPL 3

# Changing does not
try:
    quote[1] = 185.0
except TypeError as error:
    print("tuples are fixed:", error)

# One item needs a trailing comma
print(type((5,)), type((5)))  # <class 'tuple'> <class 'int'>

Le déballage : donner un nom à chaque partie

Le déballage affecte d'un coup les parties d'un tuple (ou de toute séquence) à plusieurs noms : symbol, bid, ask = quote. Le nombre de noms doit correspondre au nombre d'éléments, sinon Python lève une ValueError. Comparés à quote[0], quote[1] et quote[2], les noms disent ce que chaque partie signifie : déballer est donc généralement plus clair qu'indexer. Cela donne aussi l'échange classique sans variable temporaire : a, b = b, a.

# Unpack a quote into named parts
quote = ("AAPL", 184.25, 184.5)
symbol, bid, ask = quote
print(symbol, round(ask - bid, 2))  # AAPL 0.25

# Swap two values without a temporary
bid, ask = ask, bid
print(bid, ask)                     # 184.5 184.25

# The count must match
try:
    symbol, bid = quote
except ValueError as error:
    print("wrong count:", error)

Prendre le reste avec *

Placez un * devant un nom pour qu'il récupère tout ce qui reste, sous forme de liste : first, *rest = prices ou first, *middle, last = prices. Un seul nom avec étoile est permis, et les noms simples réclament chacun un élément. Utilisez _ pour une partie dont vous n'avez pas besoin, par exemple first, *_, last = prices.

# * collects what is left, as a list
prices = [184.0, 185.0, 183.2, 186.1]

first, *rest = prices
print(first, rest)         # 184.0 [185.0, 183.2, 186.1]

first, *_, last = prices
print(first, last)         # 184.0 186.1

Déballage dans les boucles, les retours et le tri

Le déballage fonctionne partout où un nom est affecté : dans une boucle for (for symbol, price in quotes), dans les compréhensions, et sur le résultat d'une fonction qui renvoie plusieurs valeurs avec return a, b, ce qui renvoie en réalité un seul tuple. Les tuples se comparent aussi élément par élément, premier contre premier puis, en cas d'égalité, second contre second : trier une liste de tuples (price, symbol) ordonne donc par prix et départage les égalités par symbole.

# Return several values, unpack them in the caller
def spread_and_mid(bid, ask):
    return ask - bid, (bid + ask) / 2

spread, mid = spread_and_mid(184.25, 184.5)
print(spread, mid)  # 0.25 184.375

# Tuples sort by the first item, then the second
quotes = [("AAPL", 184.5), ("MSFT", 410.2), ("GOOG", 171.0)]
by_price = sorted((price, symbol) for symbol, price in quotes)
print(by_price)     # [(171.0, 'GOOG'), (184.5, 'AAPL'), (410.2, 'MSFT')]

for price, symbol in by_price:
    print(symbol, price)
Un tuple pour un enregistrement, une liste pour une collectionUtilisez un tuple quand la position de chaque partie a un sens et que la taille est fixe, comme (symbol, bid, ask). Utilisez une liste pour de nombreux éléments semblables à ajouter ou retirer. Un tuple ne pouvant pas changer, il sert aussi là où une liste ne le peut pas, par exemple comme clé de dictionnaire, ce qui arrive bientôt.
  • (a, b, c) : un groupe fixe ; on le lit, on ne le modifie pas.
  • x, y = pair : déballer dans des noms ; les nombres doivent correspondre.
  • first, *rest = items : le nom avec étoile récupère le reste sous forme de liste.

À suivre : les dictionnaires, qui retrouvent des valeurs par un nom plutôt que par une position.

Lab : ce qui est noté

  • Déballer une cotation avec quote_stats25 pts
  • Prendre les deux extrémités avec first_last25 pts
  • Classer des cotations par prix avec ranked25 pts
  • Trouver la place la moins chère avec best_ask25 pts
Explorateur · lab-13-1
▾ lab-13-1
…
bash · dans le navigateur
learner@quantcraft:~/lab-13-1$
Python pas encore chargéPythonLn 1, Col 1Spaces: 4UTF-8

Réinitialiser ce sujet ?

Tout le contenu de lab-13-1 revient aux fichiers de départ et le terminal est vidé. Votre solution actuelle sera perdue : cette action est irréversible.

Sera réinitialisé
  • main.py → code de départ
  • Historique du terminal et sortie des tests
  • Modifications non soumises
Sera conservé
  • Meilleur score du lab
  • Votre XP et votre série
  • Progression du cours et notes

Connectez-vous pour exécuter votre code.

Tous les cours sont gratuits à lire. Créez un compte ou connectez-vous pour exécuter du code, lancer les tests et soumettre ce lab.

  • IDE dans le navigateur avec terminal bash — rien à installer
  • Correction instantanée, XP et votre place dans le parcours
Créer un compteSe connecter
OU
Continuer avec GitHub