الدوال المساعدة في الحلقات التكرارية

من موسوعة حسوب

تقدّم بايثون مجموعة من الدوال والتوابع التي تسهّل عملية إنشاء الحلقات التكرارية والاستفادة منها بصورة فعّالة في القواميس والقوائم وغيرها.

التابع items()

عند المرور على عناصر قاموس، يمكن الحصول على المفتاح والقيمة المرتبطة به في نفس الوقت باستخدام التابع items():

>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
>>> for k, v in knights.items():
...     print(k, v)
...
gallahad the pure
robin the brave

الدالة enumerate()

يمكن الحصول على موقع الفهرس والقيمة المرتبطة به في نفس الوقت عند المرور على عناصر تسلسل معيّن باستخدام الدالة enumerate()‎:

>>> for i, v in enumerate(['tic', 'tac', 'toe']):
...     print(i, v)
...
0 tic
1 tac
2 toe

الدالة zip()

للمرور على عناصر تسلسلين أو أكثر في الوقت نفسه يمكن جمع المدخلات باستخدام الدالة zip()‎:

>>> questions = ['name', 'quest', 'favorite color']
>>> answers = ['lancelot', 'the holy grail', 'blue']
>>> for q, a in zip(questions, answers):
...     print('What is your {0}?  It is {1}.'.format(q, a))
...
What is your name?  It is lancelot.
What is your quest?  It is the holy grail.
What is your favorite color?  It is blue.

الدالة reversed()

يمكن المرور بصورة عكسية على عناصر تسلسل معيّن باستخدام الدالة reversed()‎، ولكن يجب في البداية تعيين التسلسل بالاتجاه الأمامي ثم استدعاء هذه الدالة لعكس الاتجاه:

>>> for i in reversed(range(1, 10, 2)):
...     print(i)
...
9
7
5
3
1

الدالة sorted()‎

للمرور على عناصر تسلسل معيّن بطريقة مرتّبة، يمكن استخدام الدالة sorted()‎ التي تعيد قائمة جديدة مرتّبة، ولا تقوم بتغيير ترتيب القائمة الأصلية:

>>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
>>> for f in sorted(set(basket)):
...     print(f)
...
apple
banana
orange
pear

من الممكن إجراء تغييرات على القائمة أثناء المرور على عناصرها، ولكن إنشاء قائمة جديدة تعدّ طريقة أبسط وأكثر أمانًا:

>>> import math
>>> raw_data = [56.2, float('NaN'), 51.7, 55.3, 52.5, float('NaN'), 47.8]
>>> filtered_data = []
>>> for value in raw_data:
...     if not math.isnan(value):
...         filtered_data.append(value)
...
>>> filtered_data
[56.2, 51.7, 55.3, 52.5, 47.8]

مصادر