الانتقال إلى المحتوى الرئيسي
الوحدة 6 · الدرس 1 من 421/36 في الدورة~12 min
دروس الوحدة (1/4)

قائمة الفهم

فهم القائمة هو تعبير يبني قائمة من خلال التطبيق تحويل (ومرشح اختياريًا) إلى عنصر قابل للتكرار. انها طريقة بايثونية لكتابة for + append على سطر واحد.

Python
# stile imperativo (verboso)
quadrati = []
for n in range(5):
    quadrati.append(n * n)

# stile pythonico
quadrati = [n * n for n in range(5)]
# [0, 1, 4, 9, 16]

بناء الجملة الكامل

Python
[espressione for elemento in iterabile if condizione]
  • التعبير: ما يجب وضعه في القائمة الناتجة
  • للعنصر القابل للتكرار: حلقة المصدر
  • if condition (اختياري): يحتفظ فقط بالعناصر المطابقة
Python
pari = [n for n in range(10) if n % 2 == 0]
# [0, 2, 4, 6, 8]

maiuscole = [p.upper() for p in ["ciao", "mondo"]]
# ['CIAO', 'MONDO']

lunghe = [p for p in ["a", "bb", "ccc", "dddd"] if len(p) >= 3]
# ['ccc', 'dddd']

إذا/آخر داخل التعبير (الثلاثي)

** للتحويل ** بشكل مشروط (بدلاً من التصفية)، استخدم الثلاثي التعبير قبل for:

Python
[n if n > 0 else 0 for n in [-2, -1, 0, 1, 2]]
# [0, 0, 0, 1, 2]

متعدد ل: المنتج الديكارتي

يمكنك دمج عدة عبارات for:

Python
coppie = [(x, y) for x in range(3) for y in range(2)]
# [(0,0), (0,1), (1,0), (1,1), (2,0), (2,1)]

ترتيب الجمل for هو "خارجي قبل داخلي"، كما لو كانت حلقات متداخلة.

عندما لا تستخدم الفهم

  • منطق معقد يحتوي على العديد من الفروع المتداخلة if/else → استخدم حلقة صريحة.
  • الآثار الجانبية (طباعة، كتابة ملف) → تكرار، وليس الفهم.
  • أكثر من مستويين متداخلين → تكون الحلقة المسماة الصريحة أفضل دائمًا تقريبًا.

فهم القائمة المتداخلة

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

Python
matrix = [[1, 2], [3, 4]]
flat = [item for row in matrix for item in row]
# result: [1, 2, 3, 4]

يعكس ترتيب الحلقات تمامًا ترتيب التداخل للحلقات التقليدية for.

جربه

تمرين#python.m6.l1.e1
المحاولات: 0جارٍ التحميل…

بالنظر إلى `الأعداد = [1، 2، 3، 4، 5، 6]`، أنشئ `مربعات_زوجية` باستخدام مربعات الأرقام الزوجية فقط. تقييم "المربعات_الزوجية".

جارٍ تحميل المحرر…
إظهار التلميح

إذا n % 2 == 0 في النهاية.

الحل متاح بعد 3 من المحاولات

تمرين المراجعة

تمرين#python.m6.l1.e2
المحاولات: 0جارٍ التحميل…

بالنظر إلى `الكلمات = ['Ciao'، و'Mondo'، و'Python'، و'Java']`، أنشئ `أطوال` بطول كل كلمة، و`كلمات_قصيرة` مع الكلمات الأقصر من 5 أحرف فقط. تقييم `(الأطوال، الكلمات_القصيرة)`.

جارٍ تحميل المحرر…
إظهار التلميح

فهمان منفصلان.

الحل متاح بعد 3 من المحاولات

التحدي الإضافي

تمرين#python.m6.l1.e3
المحاولات: 0جارٍ التحميل…

Use a list comprehension to calculate the squares of only the even integers between 1 and 10 inclusive. Store the list in `even_squares` and evaluate it.

جارٍ تحميل المحرر…
إظهار التلميح

استخدم النطاق (1، 11) للتكرار، إذا كان x % 2 == 0 للتصفية، وx**2 كتعبير.

الحل متاح بعد 3 من المحاولات