توفر حلقة `for` في بايثون طريقة مبسطة لاجتياز الكائنات القابلة للتكرار مثل القوائم، والأزواج، والسلاسل. وبينما صُممت في المقام الأول للوصول إلى قيم العناصر، إلا أن المواقف غالباً ما تنشأ حيث تحتاج أيضاً إلى فهرس كل عنصر أثناء التكرار. تستعرض هذه المقالة طرقاً فعّالة لتحقيق ذلك.
محتويات الجدول
- الاستفادة من دالة `enumerate()`
- التطبيقات العملية لـ `enumerate()`
- طرق بديلة (أقل كفاءة)
- اختيار الطريقة المثلى
الاستفادة من دالة `enumerate()`
الطريقة الأكثر بلاغة وكفاءة للوصول إلى كل من الفهرس والقيمة داخل حلقة `for` هي استخدام دالة `enumerate()` المدمجة. وهي تأخذ كائناً قابلاً للتكرار وتعيد مُكرراً يُنتج أزواجاً من النوع `(الفهرس، القيمة)`. يُعيّن الفهرس افتراضيًا إلى 0، لكن يمكن تخصيصه باستخدام معلمة `start`.
التطبيقات العملية لـ `enumerate()`
إليك كيفية استخدام `enumerate()` بفعالية:
my_list = ["apple", "banana", "cherry"]
for index, value in enumerate(my_list):
print(f"الفهرس: {index}, القيمة: {value}")
# المخرجات:
# الفهرس: 0، القيمة: apple
# الفهرس: 1، القيمة: banana
# الفهرس: 2، القيمة: cherry
# فهرس بداية مخصص:
for index, value in enumerate(my_list, start=1):
print(f"الفهرس: {index}, القيمة: {value}")
# المخرجات:
# الفهرس: 1، القيمة: apple
# الفهرس: 2، القيمة: banana
# الفهرس: 3، القيمة: cherry
هذه الطريقة واضحة، وقابلة للقراءة، ومحسّنة لهذه المهمة المحددة.
طرق بديلة (أقل كفاءة)
في حين يُفضّل استخدام `enumerate()`، إلا أن هناك طرقاً بديلة، على الرغم من أنها أقل كفاءة وقابلية للقراءة بشكل عام:
الطريقة الأولى: استخدام `range()` وفهرسة القائمة:
my_list = ["apple", "banana", "cherry"]
for index in range(len(my_list)):
value = my_list[index]
print(f"الفهرس: {index}, القيمة: {value}")
هذه الطريقة أقل إيجازاً، وقد تكون أبطأ، خاصةً مع القوائم الكبيرة، بسبب الفهرسة الصريحة.
الطريقة الثانية: استخدام حلقة `while` وعداد:
my_list = ["apple", "banana", "cherry"]
index = 0
while index < len(my_list):
value = my_list[index]
print(f"الفهرس: {index}, القيمة: {value}")
index += 1
هذه الطريقة أقل قابلية للقراءة والكفاءة. من الأفضل تجنبها ما لم تكن إدارة الفهرس اليدوية ضرورية.
اختيار الطريقة المثلى
للوصول إلى كل من الفهرس والقيمة في حلقات `for` في بايثون، فإن `enumerate()` هي الطريقة المُوصى بها. فهي توفر أفضل مزيج من القابلية للقراءة والكفاءة. يجب فقط النظر في الطرق البديلة عندما تتطلب أسباب محددة التحكم اليدوي بالفهرس، وهو سيناريو نادر.