دروس الوحدة (1/4)
قائمة الفهم
فهم القائمة هو تعبير يبني قائمة من خلال التطبيق
تحويل (ومرشح اختياريًا) إلى عنصر قابل للتكرار. انها
طريقة بايثونية لكتابة for + append على سطر واحد.
# 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]بناء الجملة الكامل
[espressione for elemento in iterabile if condizione]- التعبير: ما يجب وضعه في القائمة الناتجة
- للعنصر القابل للتكرار: حلقة المصدر
- if condition (اختياري): يحتفظ فقط بالعناصر المطابقة
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:
[n if n > 0 else 0 for n in [-2, -1, 0, 1, 2]]
# [0, 0, 0, 1, 2]متعدد ل: المنتج الديكارتي
يمكنك دمج عدة عبارات for:
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 داخل قائمة واحدة. على سبيل المثال، لتسوية مصفوفة (قائمة قوائم) في قائمة مسطحة واحدة، يمكنك كتابة:
matrix = [[1, 2], [3, 4]]
flat = [item for row in matrix for item in row]
# result: [1, 2, 3, 4]يعكس ترتيب الحلقات تمامًا ترتيب التداخل للحلقات التقليدية for.
جربه
بالنظر إلى `الأعداد = [1، 2، 3، 4، 5، 6]`، أنشئ `مربعات_زوجية` باستخدام مربعات الأرقام الزوجية فقط. تقييم "المربعات_الزوجية".
إظهار التلميح
إذا n % 2 == 0 في النهاية.
الحل متاح بعد 3 من المحاولات
تمرين المراجعة
بالنظر إلى `الكلمات = ['Ciao'، و'Mondo'، و'Python'، و'Java']`، أنشئ `أطوال` بطول كل كلمة، و`كلمات_قصيرة` مع الكلمات الأقصر من 5 أحرف فقط. تقييم `(الأطوال، الكلمات_القصيرة)`.
إظهار التلميح
فهمان منفصلان.
الحل متاح بعد 3 من المحاولات
التحدي الإضافي
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 من المحاولات