استبدل حلقات البناء لديك باستيعابات معبّرة، لتحويل بياناتك وتصفيتها وإعادة فهرستها.
افتح هذا الدرس في Kodokonيختصر استيعاب القوائم (list comprehension) أكثر الأنماط شيوعًا في البرمجة: بناء قائمة بتحويل تسلسل أو بتصفيته. تُقرأ الصياغة كجملة: [expression for element in sequence if condition]. النتيجة نفسها التي تعطيها حلقة مع append، في سطر تصريحي واحد يتعرّف عليه كل مطوّر بايثون فورًا.
prices = [12.0, 49.9, 5.5, 199.0]
with_tax = [round(p * 1.2, 2) for p in prices]
cheap = [p for p in prices if p < 50]
print(with_tax) # [14.4, 59.88, 6.6, 238.8]
print(cheap) # [12.0, 49.9, 5.5]يتبع استيعاب القواميس المنطق نفسه بالصياغة {key: value for ...}. حالة استخدام شائعة جدًا في المشاريع: إعادة فهرسة قائمة من الكائنات بحسب مُعرِّفها، للحصول بعد ذلك على عمليات بحث فورية بدلًا من مسح القائمة في كل مرة تحتاج فيها إلى شيء.
users = [
{"id": 7, "name": "Alice"},
{"id": 12, "name": "Bruno"},
{"id": 31, "name": "Chloe"},
]
by_id = {u["id"]: u["name"] for u in users}
print(by_id[12]) # Bruno
print(31 in by_id) # Trueموضعان لـ if، ودوران مختلفان. فإذا وُضع بعد for، فإنه يصفّي: لا تظهر العناصر المرفوضة في النتيجة. وإذا وُضع قبل for، كتعبير شرطي (a if condition else b)، فإنه يختار قيمة لكل عنصر: عندئذٍ تحتفظ القائمة بالطول نفسه للمصدر.
scores = [45, 82, 67, 91]
labels = ["pass" if s >= 60 else "fail" for s in scores]
print(labels) # ['fail', 'pass', 'pass', 'pass']