דילוג לתוכן המרכזי
מודול 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]
  • ביטוי: מה להכניס לרשימה המתקבלת
  • עבור אלמנט ב-Iterable: לולאת מקור
  • אם תנאי (אופציונלי): שומר רק על הרכיבים התואמים
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 → השתמש בלולאה מפורשת.
  • תופעות לוואי (הדפסה, כתיבה של קובץ) ← לולאה, לא הבנה.
  • יותר מ-2 רמות מקוננות → לולאה בעלת שם מפורש היא כמעט תמיד טובה יותר.

הבנת הרשימה המקוננת

אתה יכול לשרשר מספר לולאות 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טוען...

בהינתן `words = ['Ciao', 'Mondo', 'Python', 'Java']`, בנה `אורכים` באורך של כל מילה ו-`short_words` עם המילים קצרות מ-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.

טוען עורך...
הצג רמז

השתמש ב-range(1, 11) כדי לחזור, אם x % 2 == 0 כדי לסנן, ו-x**2 כביטוי.

הפתרון זמין לאחר 3 ניסיונות