פייתון

נושא

מבני נתונים: איזה מתי

מחרוזת, רשימה, טאפל ומילון זה לצד זה.

מגיע מיחידות: 3, 6, 8

בעמוד הזההטבלהmutable או immutableאיך בוחריםדוגמה: אותו מידע, ארבע צורותהסבות ביניהםבדיקה עצמית

הטבלה

מחרוזת רשימה טאפל מילון
כתיבה "abc" [1, "a"] (1, "a") {"k": 1}
ריק "" [] או list() () או tuple() {} או dict()
מה בפנים תווים כל דבר כל דבר זוגות מפתח וערך
גישה s[0] l[0] t[0] d["k"]
חיתוך כן כן כן לא
len, in, for כן כן כן כן, על המפתחות
+ ו-* כן כן כן לא
שינוי לא כן לא כן
איבר אחד "a" [1] (1,) {"k": 1}

mutable או immutable

immutable: מחרוזת וטאפל. כל "שינוי" יוצר אובייקט חדש.

mutable: רשימה ומילון. אפשר להוסיף, לשנות ולמחוק במקום.

>>> s = "cat"
>>> s.upper()
'CAT'
>>> s
'cat'
>>> lst = ["c", "a", "t"]
>>> lst.append("s")
>>> lst
['c', 'a', 't', 's']

upper לא שינתה את s, והחזירה מחרוזת חדשה. append שינתה את lst, והחזירה None. זה ההבדל שהכי קל להתבלבל בו.

איך בוחרים

השאלה אם כן
זה טקסט? מחרוזת
מוסיפים ומוחקים לאורך התוכנית? רשימה
מספר איברים קבוע, ולמיקום יש משמעות? טאפל. נקודה (x, y), תאריך
מחפשים לפי שם ולא לפי מיקום? מילון. קיצורי מקלדת, ציונים לפי סטודנט

דוגמה: אותו מידע, ארבע צורות

>>> name = "Python"
>>> scores = [90, 75, 88]
>>> point = (5, 2)
>>> grades = {"math": 90, "history": 75}
>>> name[0], scores[0], point[0], grades["math"]
('P', 90, 5, 90)

הסבות ביניהם

>>> list("abc")
['a', 'b', 'c']
>>> tuple([1, 2])
(1, 2)
>>> list({"a": 1, "b": 2})
['a', 'b']
>>> list({"a": 1}.items())
[('a', 1)]

list על מילון מחזיר את המפתחות.

בדיקה עצמית

  1. איזה מבנה מתאים לרשימת המשימות של היום, שמוסיפים לה ומוחקים ממנה?
  2. איזה מבנה מתאים לשמירת צבע כשלושה מספרים, (255, 0, 0)?
  3. מה ההבדל בין [1] לבין (1)?
  4. מה יחזיר len({"a": 1, "b": 2}), ומה יחזיר len("ab")?

תשובות. 1: רשימה. 2: טאפל. מספר קבוע, ולכל מקום יש משמעות. 3: [1] הוא רשימה. (1) הוא פשוט 1. טאפל צריך פסיק, (1,). 4: שניהם 2.