σμ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 Academyالمسارات
Ctrl K
AO
+1.2k متعلّم
تسجيل الدخولانضم ↗
المسارات
AO
+1.2k متعلّم
تسجيل الدخول
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
مسار Python›الوحدة 1 · أساسيات Python للمحللين الكميين›الموضوع 1.15·~30 دمبتدئ

المجموعات

الموضع في المسارالوحدة 1 من 11 · الموضوع 15 من 33
1.15 المجموعات
—درجة المختبر— / 100إجمالي XP—التتابع—

مجموعة بلا تكرار

تحتفظ المجموعة (set) بكل قيمة مرة واحدة على الأكثر وليس لها مواضع: {"AAPL", "MSFT", "GOOG"}. إضافة قيمة موجودة لا تغيّر شيئًا. تحوّل set(items) أي كائن قابل للتكرار إلى مجموعة، وهي أسرع طريقة لإزالة التكرارات، ثم تعدّ len القيم المختلفة. وبما أنه لا ترتيب للمجموعة فلا يمكن فهرستها، ولا يُعتمد على الترتيب الذي تراه عند طباعتها. المجموعة الفارغة هي set(): أما {} فقاموس فارغ.

symbols = ["AAPL", "MSFT", "AAPL", "GOOG", "MSFT"]

# set() removes repeats
unique = set(symbols)
print(len(symbols), len(unique))      # 5 3

# Adding something already there changes nothing
unique.add("AAPL")
unique.add("TSLA")
print(len(unique))                    # 4

# {} is a dict; an empty set is set()
print(type({}), type(set()))          # <class 'dict'> <class 'set'>

اختبارات انتماء سريعة

يجيب x in some_set تقريبًا فورًا حتى مع ملايين القيم لأن المجموعة تجد القيمة بتجزئتها بدل أن تفحص كل شيء. أما الاختبار نفسه على قائمة فيفحص العناصر واحدًا واحدًا ويبطؤ كلما كبرت القائمة. لذا إذا سألت بـin مرارًا عن المجموعة نفسها، كفحص كل أمر وارد مقابل قائمة رموز محظورة، فحوّلها إلى مجموعة مرة واحدة. ويجب أن تكون عناصر المجموعة قابلة للتجزئة كمفاتيح القاموس.

# Membership: a set is the fast structure for "is it in there?"
banned = {"GME", "AMC", "BBBY"}
orders = ["AAPL", "GME", "MSFT", "AMC"]

allowed = [symbol for symbol in orders if symbol not in banned]
print(allowed)                       # ['AAPL', 'MSFT']

# Sets only keep hashable values
try:
    {["AAPL"]}
except TypeError as error:
    print("not hashable:", error)

عمليات المجموعات

تُركَّب المجموعات كما في الرياضيات. a | b هو الاتحاد (في أيٍّ منهما)، وa & b التقاطع (في كليهما)، وa - b الفرق (في a وليس في b)، وa ^ b الفرق المتماثل (في واحدة فقط). ولكل منها دالة أيضًا مثل a.union(b) التي تقبل أي كائن قابل للتكرار. وكلها تُرجع مجموعة جديدة وتترك a وb كما هما. وهذا بالضبط ما تحتاجه لمقارنة عالمين من الرموز أو قائمتين من المراكز.

# Comparing yesterday's and today's universe
yesterday = {"AAPL", "MSFT", "GOOG", "IBM"}
today = {"AAPL", "MSFT", "TSLA"}

print(sorted(yesterday | today))   # ['AAPL', 'GOOG', 'IBM', 'MSFT', 'TSLA']
print(sorted(yesterday & today))   # ['AAPL', 'MSFT']
print(sorted(today - yesterday))   # ['TSLA']   (new listings)
print(sorted(yesterday - today))   # ['GOOG', 'IBM']   (dropped)
print(sorted(yesterday ^ today))   # ['GOOG', 'IBM', 'TSLA']

تعديل مجموعة والحفاظ على الترتيب

تُدرج add(x) قيمة، وتُدرج update(items) عدة قيم، وتزيل discard(x) قيمة إن وُجدت (بصمت)، وتزيلها remove(x) لكنها ترفع KeyError إن لم تكن موجودة. المجموعة تنسى الترتيب، فإذا كان الترتيب مهمًا فتحتاج قائمة: sorted(some_set) تعطي قائمة مرتّبة، ولإزالة التكرار مع الحفاظ على ترتيب أول ظهور، مرّ على القيم وتذكّر ما رأيته في مجموعة (seen). وهذا الفحص سريع لأنه على مجموعة.

# Remove repeats and keep the first-seen order
symbols = ["MSFT", "AAPL", "MSFT", "GOOG", "AAPL"]
seen = set()
ordered = []
for symbol in symbols:
    if symbol not in seen:
        seen.add(symbol)
        ordered.append(symbol)
print(ordered)             # ['MSFT', 'AAPL', 'GOOG']

# discard is quiet, remove is strict
seen.discard("TSLA")
try:
    seen.remove("TSLA")
except KeyError:
    print("TSLA was not in the set")
المجموعات بلا ترتيب: رتّب قبل العرض أو المقارنةقد تُطبع مجموعتان متساويتان بترتيبين مختلفين، فلا تعتمد على ذلك الترتيب أبدًا. وعندما تُرجع نتيجة عملية على المجموعات أو تطبعها فضعها داخل sorted(...) لتحصل على قائمة ثابتة. وتطلب المختبرات قوائم مرتّبة لهذا السبب بالتحديد.
  • set(items): الاحتفاظ بكل قيمة مرة واحدة؛ وlen(set(items)) تعدّ القيم المختلفة.
  • x in s سريع؛ وa | b وa & b وa - b وa ^ b تبني مجموعات جديدة.
  • المجموعات بلا ترتيب: استخدم sorted(s) عندما تحتاج قائمة.

التالي: قراءة ملفات النص وكتابتها، لتحتفظ برامجك بالبيانات بين مرات التشغيل.

المختبر: ما الذي يُقيَّم

  • عُدّ الرموز المختلفة باستخدام distinct_count25 نقطة
  • اكتشف الرموز التي ظهرت حديثًا باستخدام new_listings25 نقطة
  • اعثر على ما تشترك فيه محفظتان باستخدام common_symbols25 نقطة
  • أزل التكرارات مع الحفاظ على الترتيب باستخدام dedupe_keep_order25 نقطة
المستكشف · lab-15-1
▾ lab-15-1
…
bash · داخل المتصفح
learner@quantcraft:~/lab-15-1$
لم يتم تحميل Python بعدPythonLn 1, Col 1Spaces: 4UTF-8

هل تريد إعادة ضبط هذا الموضوع؟

سيعود كل ما في lab-15-1 إلى الملفات الابتدائية وستُمسح الطرفية. ستفقد حلّك الحالي ولا يمكن التراجع عن ذلك.

سيُعاد ضبطه
  • main.py ← الشيفرة الابتدائية
  • سجل الطرفية ومخرجات الاختبارات
  • التغييرات غير المُرسلة
سيُحتفظ به
  • أفضل درجة في المختبر
  • نقاط XP والتتابع
  • تقدّم المحاضرة والملاحظات

سجّل الدخول لتشغيل الكود الخاص بك.

قراءة كل المحاضرات مجانية. أنشئ حسابًا أو سجّل الدخول لتشغيل الكود وتنفيذ الاختبارات وتسليم هذا المختبر.

  • بيئة تطوير داخل المتصفح مع طرفية bash — لا حاجة لتثبيت أي شيء
  • تصحيح فوري ونقاط خبرة ومكانك في المسار
إنشاء حسابتسجيل الدخول
أو
المتابعة عبر GitHub