3

רשימות ורשומות

Lists & Tuples

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

  • יצירת רשימות וגישה לאיברים באינדקס חיובי ושלילי
  • שימוש בחיתוך (Slicing) ושינוי איברים (Mutability)
  • שימוש במתודות רשימה: append, insert, remove, pop, sort
  • עבודה עם רשימות דו-ממדיות ולולאות מקוננות
  • הבנת ההבדל בין רשימה (Mutable) לטאפל (Immutable)
  • פריקת טאפלים (Unpacking) והחלפת ערכים

3.1מבוא לרשימות

📋 מה זה רשימה (List)?

רשימה היא אוסף מסודר של איברים שיכולים להיות מטיפוסים שונים. רשימות הן Mutable (ניתנות לשינוי).

יצירת רשימה:

# רשימה ריקה
mystery = []

# רשימה עם איברים
numbers = [10, 20, 30, 40]
names = ['אלי', 'בני', 'גדי']
mixed = [1, 'שלום', 3.14, True]

גישה לפי אינדקס:

אינדקס0123
ערך10203040
שלילי-4-3-2-1
nums = [10, 20, 30, 40]
print(nums[0])   # 10
print(nums[-1])  # 40 (איבר אחרון)
print(nums[-2])  # 30 (איבר לפני אחרון)
🚨 מלכודת! ניסיון לגשת לאינדקס שלא קיים יגרום ל-IndexError.

3.2חיתוך ושינוי (Slicing & Mutability)

🔪 חיתוך רשימות (Slicing)

אפשר לקבל חלק מהרשימה באמצעות התחביר: list[start:end:step].

  • start: כולל
  • end: לא כולל
  • step: קפיצות (ברירת מחדל 1)
nums = [0, 10, 20, 30, 40, 50]
print(nums[1:4])    # [10, 20, 30]
print(nums[:3])     # [0, 10, 20]
print(nums[3:])     # [30, 40, 50]
print(nums[::2])    # [0, 20, 40] (קפיצות של 2)

שינוי איברים (Mutability):

רשימות הן ברות-שינוי. אפשר לשנות איבר ישירות:

colors = ['Red', 'Green', 'Blue']
colors[1] = 'Yellow'  # שינוי איבר
print(colors)         # ['Red', 'Yellow', 'Blue']

פעולות שרשור וחזרה:

list1 = [1, 2]
list2 = [3, 4]
print(list1 + list2)  # [1, 2, 3, 4] (שרשור)
print(list1 * 3)      # [1, 2, 1, 2, 1, 2] (חזרה)

3.3מתודות ופונקציות של רשימות

🛠️ כלים לעבודה עם רשימות

הוספה ומחיקה:

מתודהפעולהדוגמה
append(x)הוספה לסוףlst.append(5)
insert(i, x)הוספה באינדקס ilst.insert(0, 'hi')
remove(x)מחיקת האיבר הראשון שערכו xlst.remove(20)
pop(i)מחיקה והחזרת איבר באינדקס ival = lst.pop()
clear()מחיקת כל האיבריםlst.clear()
nums = [1, 2, 3]
nums.append(4)      # [1, 2, 3, 4]
nums.insert(1, 10)  # [1, 10, 2, 3, 4]
nums.remove(2)      # [1, 10, 3, 4]
val = nums.pop()    # val = 4, nums = [1, 10, 3]

פונקציות מובנות:

nums = [10, 5, 20]
print(len(nums))  # 3 (אורך)
print(sum(nums))  # 35 (סכום)
print(max(nums))  # 20 (מקסימום)
print(min(nums))  # 5 (מינימום)

מיון:

nums = [10, 1, 5]
nums.sort()       # משנה את הרשימה המקורית ל: [1, 5, 10]
nums.reverse()    # הופך סדר: [10, 5, 1]

3.4רשימות דו-ממדיות (Nested Lists)

🧱 רשימה בתוך רשימה

רשימה דו-ממדית היא רשימה שאיבריה הם רשימות בעצמם. נהוג לחשוב עליהן כאל מטריצה עם שורות ועמודות.

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

# גישה לאיבר:
print(matrix[0])     # [1, 2, 3] (שורה 0)
print(matrix[1][2])  # 6 (שורה 1, עמודה 2)

מעבר על מטריצה עם לולאות מקוננות:

for row in matrix:
    for item in row:
        print(item, end=' ')
    print()  # ירידת שורה
💡 טיפ: בסליידות של ד"ר ריקה מצוין שאפשר להשתמש ב-matrix[row][col] כדי לגשת לכל איבר.

3.5טאפלים (Tuples)

🔒 מה זה טאפל (רשומה)?

טאפל הוא רצף של איברים הדומה לרשימה, אך הוא Immutable (לא ניתן לשינוי לאחר היצירה).

תכונות עיקריות:

  • נוצר עם סוגריים עגולים ()
  • מהיר יותר מרשימה
  • בטוח יותר (מגן על הנתונים משינוי)
my_tuple = (1, 2, 3, 'hello')
print(my_tuple[1])   # 2

# ❌ יגרום לשגיאה:
my_tuple[1] = 10     # TypeError: 'tuple' object does not support item assignment

המרה בין רשימה לטאפל:

lst = [1, 2, 3]
tpl = tuple(lst)   # הופך ל-(1, 2, 3)

new_lst = list(tpl) # הופך חזרה ל-[1, 2, 3]

3.6פריקת טאפלים (Unpacking)

📦 פריקת איברים

פייתון מאפשרת להציב איברי טאפל (או רשימה) לתוך משתנים בשורה אחת.

# פריקה בסיסית
point = (10, 20)
x, y = point
print(x)  # 10
print(y)  # 20

החלפת ערכים (Swap) - הדרך הפייתונית:

a = 5
b = 10

# במקום להשתמש במשתנה עזר (temp):
a, b = b, a

print(a)  # 10
print(b)  # 5

החזרת ערכים מרובים מפונקציה:

כפי שראינו במודול 2, פונקציה שמחזירה כמה ערכים בעצם מחזירה טאפל:

def get_coords():
    return 100, 200    # מחזיר (100, 200)

coords = get_coords()
x, y = get_coords()

שאלות תרגול

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

התחל תרגול →