σμ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.12·~40 minDébutant

Les listes

Position dans le parcoursModule 1 sur 11 · Sujet 12 sur 33
1.12 Les listes
—Score du lab— / 100XP total—Série—

Une collection ordonnée que l'on peut modifier

Une liste garde des valeurs dans l'ordre entre crochets : [184.0, 185.5, 183.2]. Elle peut contenir n'importe quelles valeurs, et len(prices) indique combien. Chaque élément a une position appelée indice, comptée à partir de 0. Un indice négatif compte depuis la fin : -1 est le dernier élément. Demander une position inexistante lève une 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]

Le découpage : une partie d'une liste

prices[start:stop] donne une nouvelle liste de start jusqu'à stop exclu. Omettez une borne et la tranche va jusqu'à ce bout : prices[:3] donne les trois premiers, prices[-3:] les trois derniers. Une tranche ne lève jamais d'erreur si elle dépasse, elle s'arrête simplement à la fin. Un piège : -0 vaut 0, donc prices[-0:] est la liste entière, pas une liste vide.

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

Ajouter et retirer

append(x) ajoute un élément à la fin, extend(items) en ajoute plusieurs, et insert(i, x) en place un à la position i. pop() retire et renvoie le dernier élément (pop(i) celui en i), et remove(x) supprime le premier élément égal à x. Ces méthodes modifient la liste sur place et renvoient None : prices = prices.append(1) laisse donc prices à None. Additionner avec + construit au contraire une nouvelle liste.

# 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]

Trier

Il y a deux façons de trier. prices.sort() réordonne la liste sur place et renvoie None. sorted(prices) laisse l'original intact et renvoie une nouvelle liste triée ; elle accepte aussi n'importe quel itérable. Toutes deux acceptent reverse=True pour le plus grand d'abord et key=... pour trier selon autre chose, par exemple key=len. Préférez sorted quand d'autres parties du code peuvent encore utiliser l'ordre d'origine.

# 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]

Deux noms, une seule liste

backup = prices ne copie pas la liste : les deux noms désignent le même objet, donc modifier l'un modifie l'autre. Faites une vraie copie (superficielle) avec prices.copy(), list(prices) ou la tranche prices[:]. Il en va de même pour les fonctions : une fonction qui appelle .append, .sort ou .pop sur son argument modifie aussi la liste de l'appelant, ce qui est rarement ce qu'il attend.

# 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]
Renvoyez une nouvelle liste, ne surprenez pas l'appelantUne fonction qui reçoit une liste devrait normalement la laisser telle qu'elle l'a trouvée et en renvoyer une nouvelle. Utilisez sorted(...), les tranches et les compréhensions, qui construisent toutes de nouvelles listes. Les labs vérifient que la liste reçue est inchangée ensuite.
  • items[i], items[-1] : un élément ; items[a:b] : une nouvelle liste.
  • append, extend, insert, pop, remove modifient la liste et ne renvoient rien d'utile.
  • sorted(items) construit une nouvelle liste triée ; items.sort() réordonne sur place.

À suivre : les tuples et le déballage, le cousin de taille fixe de la liste, et une façon propre de séparer des valeurs.

Lab : ce qui est noté

  • Choisir les prix les plus élevés avec top_n25 pts
  • Prendre les valeurs les plus récentes avec last_n25 pts
  • Moyenner chaque fenêtre de prix avec moving_average25 pts
  • Déplacer des valeurs d'un bout à l'autre avec rotate25 pts
Explorateur · lab-12-1
▾ lab-12-1
…
bash · dans le navigateur
learner@quantcraft:~/lab-12-1$
Python pas encore chargéPythonLn 1, Col 1Spaces: 4UTF-8

Réinitialiser ce sujet ?

Tout le contenu de lab-12-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