σμ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.12·~40 دمبتدئ

القوائم

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

مجموعة مرتّبة يمكنك تعديلها

تحفظ القائمة (list) القيم بترتيبها بين أقواس مربعة: [184.0, 185.5, 183.2]. يمكنها أن تحمل أي قيم، وlen(prices) يخبرك بعددها. لكل عنصر موضع يسمى الفهرس (index) ويُعدّ من 0. الفهرس السالب يعدّ من النهاية، فـ-1 هو العنصر الأخير. طلب موضع غير موجود يرفع 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]

التقطيع: جزء من قائمة

تعطي prices[start:stop] قائمة جديدة من start حتى stop دون أن تشمله. إن حذفت أحد الطرفين امتدّت إلى ذلك الطرف: prices[:3] أول ثلاثة، وprices[-3:] آخر ثلاثة. لا ترفع الشريحة خطأً إذا تجاوزت الحدود، بل تتوقف عند النهاية. فخّ واحد: -0 يساوي 0، فـprices[-0:] هي القائمة كلها وليست فارغة.

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

الإضافة والحذف

تضيف append(x) عنصرًا في النهاية، وتضيف extend(items) عدة عناصر، وتضع insert(i, x) عنصرًا في الموضع i. تزيل pop() آخر عنصر وتُرجعه (pop(i) عنصر الموضع i)، وتحذف remove(x) أول عنصر يساوي x. تعدّل هذه الدوال القائمة في مكانها وتُرجع None، لذا فإن prices = prices.append(1) يترك prices مساويًا لـNone. أما الجمع بـ+ فيبني قائمة جديدة.

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

الترتيب

هناك طريقتان للترتيب. تعيد prices.sort() ترتيب القائمة في مكانها وتُرجع None. أما sorted(prices) فتترك الأصل كما هو وتُرجع قائمة مرتّبة جديدة، وتقبل أي كائن قابل للتكرار. وكلتاهما تقبل reverse=True للأكبر أولًا وkey=... للترتيب بحسب شيء آخر مثل key=len. فضّل sorted حين قد يستخدم كود آخر الترتيب الأصلي.

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

اسمان لقائمة واحدة

backup = prices لا ينسخ القائمة: الاسمان يشيران إلى الكائن نفسه، فتغيير أحدهما يغيّر الآخر. أنشئ نسخة حقيقية (سطحية) بـprices.copy() أو list(prices) أو الشريحة prices[:]. وينطبق ذلك على الدوال: الدالة التي تستدعي .append أو .sort أو .pop على وسيطها تغيّر قائمة المستدعي أيضًا، وهذا نادرًا ما يتوقعه.

# 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]
أرجع قائمة جديدة ولا تفاجئ المستدعيينبغي عادةً للدالة التي تستقبل قائمة أن تتركها كما وجدتها وتُرجع قائمة جديدة. استخدم sorted(...) والشرائح والاشتقاقات، فكلها تبني قوائم جديدة. تتحقق المختبرات من أن القائمة التي أُعطيت لك لم تتغيّر بعد ذلك.
  • items[i] وitems[-1]: عنصر واحد؛ items[a:b]: قائمة جديدة.
  • append وextend وinsert وpop وremove تغيّر القائمة ولا تُرجع شيئًا مفيدًا.
  • sorted(items) تبني قائمة مرتّبة جديدة؛ وitems.sort() تعيد الترتيب في مكانها.

التالي: الصفوف (tuples) وفكّ الحزم، الشقيق ثابت الحجم للقائمة، وطريقة أنيقة لفصل القيم.

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

  • اختر أعلى الأسعار باستخدام top_n25 نقطة
  • خذ أحدث القيم باستخدام last_n25 نقطة
  • احسب متوسط كل نافذة أسعار باستخدام moving_average25 نقطة
  • انقل القيم بين طرفي القائمة باستخدام rotate25 نقطة
المستكشف · lab-12-1
▾ lab-12-1
…
bash · داخل المتصفح
learner@quantcraft:~/lab-12-1$
لم يتم تحميل Python بعدPythonLn 1, Col 1Spaces: 4UTF-8

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

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

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

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

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

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