الإنشاء المختصر
عندما نبني قائمة بحلقة for ونضيف نتيجة لكل عنصر، يمكننا جمع التعبير والحلقة والشرط في صيغة واحدة:
- نعبر عن الناتج أولًا (
expression) - ثم الحلقة (
for item in iterable) - ثم الشرط -إن وُجِد- (
if condition) - ونحيط ذلك بالقوسين المربعين
[]لتكون الحاوية قائمة (list)
وتسمى: الإنشاء المختصر (List Comprehension) في القائمة.
وفيما يلي نشرحها بالأمثلة.
أولاً: التعبير
مثال: المربعات
نريد مربعات الأعداد. نبدأ بقائمة فارغة ونضيف مربع كل عدد:
يمكن صياغة ذلك اختصارًا بهذا الشكل:
مثال: التخفيض
مثلاً تطبيق الخصم على أسعار المنتجات:
مثال: فرد قائمة قوائم
وإذا كنا نريد فرد قائمة عناصرها أيضًا قوائم؛ وهذا يسمى التسطيح أو الفرد (Flattening). يمكن كتابة إجراء الفرد بحلقتين متداخلتين بهذا الشكل:
والاختصار يبدأ بالنتيجة أولاً (d) ثم الحلقات: الخارجية ثم الداخلية:
الصيغة المختصرة في القاموس
وكذلك صيغتها الاختصار في إنشاء القاموس باختلاف واحد: التعبير يكون في الطرفين؛ في طرف المفتاح وفي طرف القيمة، تفصل بينهما النقطتان الرأسيتان (:)
مثال: عكس اتجاه القاموس
لدينا قاموس w2m يربط الكلمات بمعانيها المكتوبة بالإنجليزية. نعكس اتجاهه لإنشاء قاموس m2w نبحث فيه بالمعنى ونحصل على الكلمة. نفترض أن المعاني لا تتكرر.
ثانيًا: الشرط
نكتب شرط الاختيار بعد الحلقة في الإنشاء المختصر:
الخلاصة الثنائية
يمكن معرفة خلاصة قائمة ثنائية (list[bool]) بإحدى دالتين تعملان مع الإنشاء المختصر لصياغة أكواد سهلة الكتابة والقراءة:
مثال يوضِّحُ آلية عملهما:
لاحظ أن بايثون تعتبر:
- أي قيمة غير الصفر
0قيمة صواب (True). - وأما الصفر نفسه فقيمة خطأ (
False).
مثال: فحص شرط على العناصر
نلخص درجات مجموعة من الطلاب في حكم واحد مثل:
- هل نجح جميع الطلاب؟
- هل نجح طالب واحد على الأقل؟
لاحظ في هذا المثال أننا نضع حدًّا بحيث نحول القيَم العددية (int) إلى قيم ثنائيَّة (bool) إما تحقق الشرط الذي اخترناه أو لا، ثم استعملنا تلك القائمة مع any و all على النحو التالي: