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