شرح دالة enumerate في Python ولماذا تسهّل التعامل مع القوائم

في هذا الدرس من موقع بايثون العرب سنتعلم دالة مهمة ومفيدة جدًا في لغة Python اسمها enumerate().

هذه الدالة تساعدك عندما تريد المرور على عناصر قائمة، وفي نفس الوقت تريد معرفة رقم كل عنصر داخل القائمة أو ما يسمى index.

{getToc} $title={محتوى المقال}

كثير من المبتدئين يستخدمون range() و len() للحصول على رقم العنصر داخل القائمة، وهذا ليس خطأ، لكن في حالات كثيرة تكون دالة enumerate() أوضح وأسهل في القراءة.

{alertInfo} إذا كنت تتعامل مع قائمة وتحتاج إلى العنصر ورقمه في نفس الوقت، فغالبًا دالة enumerate هي الاختيار الأنظف والأسهل.

شرح أن دالة enumerate في Python ترجع قيمتين هما index و item لكل عنصر داخل القائمة

إذا لم تكن مرتاحًا مع القوائم والحلقات بعد، يمكنك مراجعة دروس القوائم والحلقات في موقع بايثون العرب قبل هذا الدرس: شرح Lists في Python و شرح Loops في Python.

ما المشكلة التي تحلها دالة enumerate؟

تخيل أن لديك قائمة أسماء، وتريد طباعة كل اسم مع رقمه داخل القائمة.

القائمة مثلًا:

names = ["Ahmed", "Sara", "Omar"]

نريد أن تكون النتيجة بهذا الشكل:

0 Ahmed
1 Sara
2 Omar

هنا نحتاج إلى شيئين في نفس الوقت:

  • رقم العنصر داخل القائمة.
  • قيمة العنصر نفسها.

يمكنك فعل ذلك بأكثر من طريقة، لكن دالة enumerate() تجعل الكود أوضح وأسهل، خصوصًا عندما يكبر البرنامج.

الطريقة القديمة باستخدام range و len

قبل أن نستخدم enumerate()، دعنا نرى الطريقة التي يستخدمها كثير من المبتدئين للحصول على رقم العنصر وقيمته.

names = ["Ahmed", "Sara", "Omar"]

for i in range(len(names)):
    print(i, names[i])

الناتج:

0 Ahmed
1 Sara
2 Omar

هذه الطريقة صحيحة، لكنها ليست دائمًا الأفضل من ناحية الوضوح. السبب أنك تحصل على رقم i أولًا، ثم تستخدمه للوصول إلى العنصر داخل القائمة بهذا الشكل:

names[i]

كلما كان الكود بسيطًا وواضحًا، كانت قراءته وصيانته أسهل.

{alertWarning} الطريقة باستخدام range و len ليست خطأ، لكنها قد تجعل الكود أطول وأقل وضوحًا عندما يكون هدفك فقط الحصول على index والعنصر.

شرح الطريقة القديمة باستخدام range و len في Python للوصول إلى رقم index والعنصر داخل List


استخدام enumerate في Python

الطريقة الأسهل والأوضح هي استخدام دالة enumerate().

هذه الدالة تعطيك في كل دورة من الحلقة قيمتين:

  • index: رقم العنصر.
  • item: العنصر نفسه.

شاهد المثال:

names = ["Ahmed", "Sara", "Omar"]

for index, name in enumerate(names):
    print(index, name)

الناتج:

0 Ahmed
1 Sara
2 Omar

لاحظ أن الكود أصبح أوضح. المتغير index يحتوي على رقم العنصر، والمتغير name يحتوي على قيمة العنصر نفسها.

شرح الكود خطوة بخطوة

السطر الأهم في المثال هو:

for index, name in enumerate(names):

معناه: مرّ على القائمة names، وفي كل مرة أعطني قيمتين:

  • index: رقم العنصر داخل القائمة.
  • name: الاسم نفسه.

ثم نطبع القيمتين بهذا السطر:

print(index, name)

إذن بدل أن نكتب range(len(names)) ثم نصل إلى العنصر باستخدام names[i]، أصبحت دالة enumerate() تعطينا الاثنين مباشرة.

{alertSuccess} الفكرة ببساطة: enumerate تختصر عليك خطوة الوصول إلى العنصر باستخدام رقم index، وتعطيك الرقم والعنصر معًا.

تغيير بداية الترقيم في enumerate

افتراضيًا، تبدأ دالة enumerate() الترقيم من الصفر.

لكن في بعض الحالات، خصوصًا عند عرض البيانات للمستخدم، قد تريد أن يبدأ الترقيم من 1 بدل 0.

يمكنك فعل ذلك باستخدام المعامل start.

names = ["Ahmed", "Sara", "Omar"]

for index, name in enumerate(names, start=1):
    print(index, name)

الناتج:

1 Ahmed
2 Sara
3 Omar
{alertInfo} استخدم start=1 عندما تريد عرض الترقيم للمستخدم بشكل طبيعي يبدأ من 1 بدل 0.

مثال عملي: عرض قائمة مهام

لنفترض أن لدينا قائمة مهام، ونريد عرضها للمستخدم بشكل مرتب.

tasks = [
    "Learn Python",
    "Practice loops",
    "Build a small project"
]

for number, task in enumerate(tasks, start=1):
    print(f"{number}. {task}")

الناتج:

1. Learn Python
2. Practice loops
3. Build a small project

هذا المثال يوضح استخدامًا عمليًا جدًا لدالة enumerate()، خاصة عند بناء قوائم مهام أو قوائم اختيارات أو عرض عناصر مرقمة للمستخدم.

مقارنة بين enumerate و range len

الآن بعد أن رأينا الطريقتين، دعنا نقارن بينهما بشكل واضح.

مقارنة بين enumerate و range مع len في Python عند التعامل مع القوائم

الطريقة الفكرة متى تستخدمها؟
range(len(list)) تحصل على رقم index ثم تستخدمه للوصول إلى العنصر. عندما تحتاج إلى التحكم في الأرقام أو التعامل مع أكثر من قائمة بحذر.
enumerate(list) تحصل على index والعنصر مباشرة. عندما تريد كودًا أوضح أثناء المرور على قائمة واحدة.

في أغلب الحالات البسيطة التي تريد فيها المرور على قائمة واحدة ومعرفة رقم كل عنصر، ستكون enumerate() هي الاختيار الأفضل من ناحية الوضوح.

خطأ شائع عند استخدام enumerate

من الأخطاء الشائعة أن ينسى المبتدئ أن enumerate() تعطي قيمتين، فيكتب الكود بهذا الشكل:

names = ["Ahmed", "Sara", "Omar"]

for name in enumerate(names):
    print(name)

الناتج سيكون بهذا الشكل:

(0, 'Ahmed')
(1, 'Sara')
(2, 'Omar')

هذا ليس خطأ قاتلًا، لكنه يعني أن كل نتيجة عبارة عن زوج يحتوي على رقم العنصر وقيمته.

الأفضل أن تفصل القيمتين بهذا الشكل:

for index, name in enumerate(names):
    print(index, name)
{alertWarning} تذكر أن enumerate تعيد رقم العنصر والعنصر نفسه، لذلك غالبًا نكتب متغيرين داخل for.

مثال آخر: البحث عن عنصر مع رقمه

من الاستخدامات المفيدة لدالة enumerate() أنك تستطيع البحث عن عنصر داخل قائمة، وعند العثور عليه تطبع رقمه.

مثال:

products = ["Keyboard", "Mouse", "Monitor", "USB Cable"]

for index, product in enumerate(products):
    if product == "Monitor":
        print(f"Found at index {index}")

الناتج:

Found at index 2

في هذا المثال، مررنا على المنتجات، وعندما وجدنا المنتج Monitor طبعنا رقم موقعه داخل القائمة.

تحدي بسيط لك

لديك قائمة درجات، والمطلوب عرض رقم كل طالب مع درجته.

grades = [85, 92, 78, 90]

حاول أن تجعل النتيجة بهذا الشكل:

Student 1: 85
Student 2: 92
Student 3: 78
Student 4: 90

الحل المقترح:

grades = [85, 92, 78, 90]

for student_number, grade in enumerate(grades, start=1):
    print(f"Student {student_number}: {grade}")
{alertSuccess} هذا التمرين ممتاز لأنه يوضح كيف تستخدم enumerate في مواقف عملية مثل عرض الطلاب، المهام، المنتجات، أو عناصر القائمة.

الخلاصة

ملخص استخدام enumerate في Python مع start=1 لترقيم عناصر القائمة من الرقم واحد

دالة enumerate() من الدوال البسيطة والمفيدة جدًا في Python.

استخدمها عندما تريد المرور على عناصر قائمة، وفي نفس الوقت تحتاج إلى رقم كل عنصر داخل القائمة.

  • enumerate() تعطيك رقم العنصر وقيمته.
  • افتراضيًا يبدأ الترقيم من 0.
  • يمكنك استخدام start=1 لجعل الترقيم يبدأ من 1.
  • هي غالبًا أوضح من استخدام range(len(list)).
  • تساعدك على كتابة كود أنظف وأسهل في القراءة.

بهذا تكون تعلمت واحدة من الأدوات الصغيرة التي تجعل كود بايثون أوضح وأسهل، خاصة عند التعامل مع القوائم والحلقات.

تابع دروس بايثون العرب لتتعلم لغة بايثون خطوة بخطوة من خلال أمثلة عملية واضحة ومناسبة للمبتدئين.

إرسال تعليق

أحدث أقدم