0Pricing
Competitive Programming Academy · درس

العثور على الفهرس لا القيمة فقط

تتبّع المواضع باستخدام enumerate

العثور على الفهرس لا القيمة فقط درس مجاني في Competitive Programming Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Competitive Programming Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.

المواضع مهمة

غالبًا لا تكون الإجابة هي القيمة، بل موضعها. تطلب مسائل المسابقات كثيرًا فهرسًا يبدأ من 1 أو من 0، لذا تتبّع المواضع.

a = [4, 1, 7, 3]

العثور باستخدام .index()

يعيد a.index(x) موضع أول تطابق. من السهل كتابته، لكنه يمسح من اليسار إلى اليمين بزمن O(n).

pos = a.index(7)  # 2

القيم المفقودة ترفع أخطاء

إذا لم تكن القيمة موجودة، يرفع .index() خطأ ValueError ويتسبب في انهيار وقت التشغيل. تحقّق من العضوية أولًا عندما لا تكون متأكدًا.

if x in a:
    pos = a.index(x)

التكرار باستخدام enumerate

يوفّر لك enumerate الفهرس والقيمة معًا في كل خطوة، وهي الطريقة الواضحة لتتبّع المواضع أثناء المسح.

for i, v in enumerate(a):
    print(i, v)

ابدأ enumerate من الواحد

تطلب كثير من أنظمة التحكيم مواضع تبدأ من 1. مرّر start=1 إلى enumerate ليكون الفهرس الأول هو 1، بما يطابق نص المسألة.

for i, v in enumerate(a, start=1):
    ...

فهرس القيمة العظمى

للعثور على موضع القيمة العظمى، امسح المصفوفة وتذكّر أفضل فهرس، لأن max(a) وحدها تعطي القيمة فقط.

best = 0
for i, v in enumerate(a):
    if v > a[best]:
        best = i

طريقة argmax الأنيقة

حيلة مختصرة: اربط كل فهرس بقيمته وخذ القيمة العظمى حسب القيمة. ويعطيك النطاق الموضع مباشرةً.

best = max(range(len(a)), key=lambda i: a[i])

جمع جميع فهارس التطابق

هل تحتاج إلى كل موضع تظهر فيه قيمة؟ يجمع comprehension على enumerate جميع التطابقات في سطر واحد.

idx = [i for i, v in enumerate(a) if v == 7]

ربط القيمة بالفهرس

لعمليات البحث المتكررة، أنشئ dict يربط القيمة بالفهرس مرة واحدة، لتحوّل كل بحث لاحق إلى عملية بزمن O(1).

where = {v: i for i, v in enumerate(a)}

تحتاج القيم المكررة إلى عناية

يحتفظ dict الذي يربط القيمة بالفهرس بآخر ظهور فقط. استخدم قائمة لكل مفتاح، أو enumerate، عندما تكون التكرارات مهمة.

where = {}
for i, v in enumerate(a):
    where.setdefault(v, []).append(i)

التحويل بين أساسَي الفهرسة

انتبه إلى الأساس: إذا خزّنت الفهارس بدءًا من 0 وكان يجب طباعة فهارس بدءًا من 1، فأضف واحدًا. خلط الأساسين من أسباب الإجابات الخاطئة التي يصعب اكتشافها.

print(pos + 1)  # 0-based to 1-based

تحقق سريع

تريد مواضع تبدأ من 1 أثناء التكرار. ماذا تكتب؟

مراجعة: تتبّع المواضع

يمكنك الآن العثور على الفهارس المفردة وفهارس القيم العظمى وجميع الفهارس، وربط القيم بمواضعها بأمان. يُعد enumerate أداة موثوقة لتتبّع المواضع. 🎯

الأسئلة الشائعة

هل درس «العثور على الفهرس لا القيمة فقط» مجاني؟

نعم — نص درس «العثور على الفهرس لا القيمة فقط» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Competitive Programming Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.

ماذا ستتعلم في «العثور على الفهرس لا القيمة فقط»؟

تتبّع المواضع باستخدام enumerate تتمرن على Competitive Programming Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Competitive Programming Academy؟

لا تُشترط خبرة سابقة. Competitive Programming Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «العثور على الفهرس لا القيمة فقط»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Competitive Programming Academy هذا؟

نعم. كل درس في Competitive Programming Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. القوائم والفهرسة والتقطيع في CP
  2. إنشاء المصفوفات بسرعة باستخدام الاستيعاب
  3. ‏Min وMax وSum والمجاميع التراكمية
  4. العثور على الفهرس لا القيمة فقط
← العودة إلى Competitive Programming Academy