9

List Comprehensions

קיצורים חכמים

🎯 מטרות הלמידה

  • List Comprehension
  • Dictionary Comprehension
  • סינון עם if

9.1List Comprehension

📝 קיצור ליצירת רשימות

במקום לולאה ארוכה, שורה אחת!

# דרך ארוכה
squares = []
for x in range(5):
    squares.append(x ** 2)

# List Comprehension
squares = [x ** 2 for x in range(5)]
print(squares)  # [0, 1, 4, 9, 16]

# עם סינון
evens = [x for x in range(10) if x % 2 == 0]
print(evens)  # [0, 2, 4, 6, 8]

9.2List Comprehension - תחביר ומבנה

📝 תחביר List Comprehension

List Comprehension מאפשרת יצירת רשימה בשורה אחת — קצרה, קריאה ומהירה יותר מלולאת for רגילה.

לולאת for רגילהList Comprehension
result = []
for x in range(5):
  result.append(x**2)
result = [x**2 for x in range(5)]
# ריבועים של 0-9
squares = [x**2 for x in range(10)]
print(squares)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# רק מספרים זוגיים (עם תנאי if)
evens = [x for x in range(20) if x % 2 == 0]
print(evens)  # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

# טרנספורמציה של מחרוזות
words = ['hello', 'world', 'python']
upper = [w.upper() for w in words]
print(upper)  # ['HELLO', 'WORLD', 'PYTHON']

9.3Dictionary ו-Set Comprehensions

📚 Comprehensions לסוגים נוספים

# Dictionary Comprehension
names = ['דני', 'מיכל', 'יוסי']
lengths = {name: len(name) for name in names}
print(lengths)  # {'דני': 3, 'מיכל': 4, 'יוסי': 4}

# סינון מילון - רק ערכים מעל 3
long_names = {k: v for k, v in lengths.items() if v > 3}
print(long_names)  # {'מיכל': 4, 'יוסי': 4}

# Set Comprehension - אורכים ייחודיים
words = ['Stop', 'And', 'Smell', 'The', 'Roses']
unique_lengths = {len(word) for word in words}
print(unique_lengths)  # {3, 4, 5} (ללא כפילויות)
⚠️ מלכודת מבחן: {x for x in lst} = Set, {k: v ...} = Dictionary. {} ריק = Dictionary ריק, לא Set!

9.4Nested Comprehensions

🔲 Comprehensions מקוננות

ניתן לשלב מספר לולאות for בתוך comprehension אחת — שימושי לעבודה עם מטריצות.

# מטריצה 3x3 (רשימה של רשימות)
matrix = [[i * j for j in range(1, 4)] for i in range(1, 4)]
print(matrix)
# [[1, 2, 3],
#  [2, 4, 6],
#  [3, 6, 9]]

# השטחת מטריצה לרשימה אחת
nested = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat = [x for row in nested for x in row]
print(flat)  # [1, 2, 3, 4, 5, 6, 7, 8, 9]
💡 סדר הקריאה: [expr for outer for inner] = לולאה חיצונית קודם, כמו לולאות for מקוננות רגילות.
⚠️ Nested comprehensions מורכבות — אם הן קשות לקריאה, עדיף לולאה רגילה!

9.5Generator Expressions

⚡ Generator Expression - גרסה עצלה

דומה ל-List Comprehension אבל משתמש בסוגריים עגולים (). לא יוצר את כל הרשימה בזיכרון — מייצר ערכים לפי דרישה.

# List Comprehension - כל הרשימה בזיכרון
lst = [x**2 for x in range(1000000)]  # 1M איברים בזיכרון!

# Generator Expression - עצל
gen = (x**2 for x in range(1000000))  # כמעט ללא זיכרון!

# שימוש נפוץ עם sum(), max(), min()
total = sum(x**2 for x in range(10))
print(total)  # 285

# any() / all() עם generator
numbers = [2, 4, 6, 8, 9]
all_even = all(x % 2 == 0 for x in numbers)
print(all_even)  # False (9 אינו זוגי)

שאלות תרגול

5 שאלות בנושא זה

התחל תרגול →