5.6. تقنيات التكرار #
عند التكرار في القواميس، يمكن استرجاع المفتاح والقيمة المقابلة في نفس الوقت باستخدام دالة items().
>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
>>> for k, v in knights.items():
... print(k, v)
...
gallahad the pure
robin the brave
عند التكرار في تسلسل، يمكن استرجاع مؤشر الموضع والقيمة المقابلة في نفس الوقت باستخدام دالة enumerate().
>>> for i, v in enumerate(['tic', 'tac', 'toe']):
... print(i, v)
...
0 tic
1 tac
2 toe
للتكرار على تسلسلين أو أكثر في نفس الوقت، يمكن إقران المُدخلات باستخدام دالة 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().
>>> for i in reversed(range(1, 10, 2)):
... print(i)
...
9
7
5
3
1
للتكرار على تسلسل بترتيب مرتب، استخدم الدالة sorted() التي تُرجع قائمة مرتبة جديدة مع ترك المصدر دون تعديل.
>>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
>>> for i in sorted(basket):
... print(i)
...
apple
apple
banana
orange
orange
pear
استخدام الدالة set() على تسلسل يُزيل العناصر المكررة. استخدام الدالة sorted() مع الدالة set() على تسلسل هو طريقة اصطلاحية للتكرار على عناصر فريدة من التسلسل بترتيب مرتب.
>>> 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]