دالة ()enumerate في بايثون

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

دالة ()enumerate في بايثون

قبل أن نبدأ، يجب أن نغطي بعض المعلومات الأساسية حول دالة enumerate(). يبدو بناء الجملة على النحو التالي:

enumerate(iterable, start=0)

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

التكرار باستخدام حلقة for

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

>>> words = ['here', 'are', 'some', 'words']
>>> for word in words:
...     print(word)

النتيجة:

here
are
some
words

لاحظ أن العناصر من نوع السلسلة. يمكنك التحقق من ذلك باستخدام الدالة المضمنة type().

نحن نستفيد من العديد من الدوال المضمنة في هذه المقالة،و بدلاً من ذلك، يمكننا طباعة فهرس كل عنصر في القائمة باستخدام الدالتين range() وlen():

>>> for i in range(len(words)):
...     print(i)

النتيجة:

0
1
2
3

هنا، نوع المؤشرات هو عدد صحيح. ولكن هناك بعض المواقف التي قد ترغب فيها في طباعة كل من العنصر والمؤشر في نفس الحلقة. إحدى الطرق هي إنشاء عداد وزيادة العداد بعد كل تكرار:

>>> i = 0
>>> for word in words:
...     print(i, word)
...     i+=1

النتيجة:

0 here
1 are
2 some
3 words

نحن نستخدم عامل تعيين الجمع (+=) لزيادة العداد بعد كل تكرار. هذا ينجز المهمة، لكنه ليس الطريقة الأكثر كفاءة.

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

وهنا يأتي دور دالة enumerate() لتسهيل حياتنا. فبدلاً من إنشاء عداد وتكرار العناصر، يمكننا الحصول على نفس النتيجة بكفاءة أكبر باستخدام دالة enumerate():

>>> for i, word in enumerate(words):
...     print(i, word)

النتيجة:

0 here
1 are
2 some
3 words

تبدأ المؤشرات من القيمة الافتراضية صفر ويتم طباعتها كأعداد صحيحة. تتم طباعة الكلمات كسلاسل.

لنبدأ في زيادة التعقيد من خلال النظر في حالة الاستخدام التالية. لدينا نتائج سباق جري لمسافة 100 متر، ونرغب في طباعتها. نريد طباعة ثلاثة أشياء: موقع العداء، واسمه، ووقته. يتم تخزين النتائج في قائمة من الثنائيات:

>>> results = [('Thompson-Herah', 10.610), ('Fraser-Pryce', 10.740), ('Jackson', 10.760)]

يمكننا استخدام ما تعلمناه حتى الآن لتحقيق ذلك في بضعة أسطر فقط من كود بايثون:

>>> for i, data in enumerate(results, start=1):
...     name, time = data[0], data[1]
...     print('{}. {}, {}s'.format(i, name, time))

النتيجة:

1. Thompson-Herah, 10.61s
2. Fraser-Pryce, 10.74s
3. Jackson, 10.76s

تتم طباعة الموضع عن طريق بدء العداد عند 1 عبر الوسيطة الاختيارية start=1. الاسم والوقت هما العنصران الأول والثاني في المجموعة. لاحظ استخدام تنسيق السلسلة لطباعة النتائج بشكل جيد.

لحسن الحظ، جاءت قائمة النتائج مرتبة مسبقًا من الأسرع إلى الأبطأ. إذا لم يكن الأمر كذلك، فيمكنك فرز العناصر في القائمة إما حسب العنصر الأول (الاسم)، أو العنصر الثاني (الوقت). للقيام بذلك، ستحتاج إلى الاستفادة من دالة sorted() المضمنة. هذا صعب بعض الشيء، لكن جربه.

التدرب على استخدام ()enumerate في بايثون

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

نود أن نشجعك على استخدام ما تعلمته في هذه المقالة، لذا لديك الواجب المنزلي التالي. أولاً، قم بتنزيل مجموعة بيانات الماراثون. هذا ملف CSV يحتوي على العمر والجنس والتقسيم والوقت النهائي للمشاركين في الماراثون. مهمتك هي قراءة البيانات في بايثون وطباعة البيانات لأسرع 10 متسابقين وأبطأ 10 متسابقين.

يعد تعلم هذه المهارات الأساسية في وقت مبكر من رحلتك البرمجية أمرًا مهمًا. ستستخدمها بانتظام لبناء برامج أكثر تعقيدًا وإثارة للاهتمام. برمجة سعيدة!


اكتشاف المزيد من بايثون العربي

اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

Scroll to Top

اكتشاف المزيد من بايثون العربي

اشترك الآن للاستمرار في القراءة والحصول على حق الوصول إلى الأرشيف الكامل.

Continue reading