Smart-World Surf

יחידה 2: מבני נתונים מובנים

למידת מבני הנתונים המרכזיים של פייתון והשימוש בהם.

ברוכים הבאים לשיעור הממוקד במבני הנתונים המובנים של פייתון. יחידה זו, "מבני נתונים מובנים", היא אבן יסוד בקורס 20606 "תכנות וניתוח נתונים בשפת פייתון", והבנה מעמיקה שלה חיונית להצלחה בבחינה ובפיתוח קוד יעיל. בשיעור זה נתמקד בהיבטים המרכזיים של מבני הנתונים המובנים בפייתון – רשימות, טאפלים, מילונים וקבוצות – תוך שימת דגש על מאפייניהם, השימוש הנכון בהם, והשפעתם על יעילות הקוד, כפי שנדרש לעיתים קרובות בבחינות האוניברסיטה הפתוחה.

יסודות מבני הנתונים המובנים בפייתון

מבני נתונים הם דרכים לארגן ולאחסן נתונים במחשב, באופן המאפשר גישה, שינוי ועיבוד יעילים. פייתון מציעה מספר מבני נתונים מובנים וחזקים המהווים בסיס לכל תוכנית.

מבנה נתונים (Data Structure): דרך ספציפית לארגן נתונים בזיכרון המחשב, המאפשרת פעולות שונות (כמו הכנסה, מחיקה, חיפוש) ביעילות משתנה.
שינוי (Mutability): תכונה המציינת האם ניתן לשנות את תוכן מבנה הנתונים לאחר יצירתו. מבני נתונים ניתנים לשינוי (mutable) מאפשרים הוספה, מחיקה או שינוי של איברים. מבני נתונים שאינם ניתנים לשינוי (immutable) אינם מאפשרים זאת; כל שינוי דורש יצירת אובייקט חדש.
סדר (Order): תכונה המציינת האם סדר האיברים במבנה הנתונים נשמר. במבנים מסודרים, האיברים נשמרים בסדר שבו הוכנסו או בסדר ממוין, וניתן לגשת אליהם לפי אינדקס.
ייחודיות (Uniqueness): תכונה המציינת האם מבנה הנתונים מאפשר אחסון של איברים כפולים. במבנים ייחודיים, כל איבר יכול להופיע פעם אחת בלבד.

מאפיינים מרכזיים של מבני הנתונים בפייתון:

  • רשימות (Lists): אוסף מסודר וניתן לשינוי של איברים. יכולות להכיל איברים מטיפוסים שונים.
  • טאפלים (Tuples): אוסף מסודר ובלתי ניתן לשינוי של איברים. שימושיים לייצוג קבוצת נתונים קבועה.
  • מילונים (Dictionaries): אוסף לא מסודר (בגרסאות פייתון קודמות ל-3.7) או מסודר (מגרסה 3.7 ואילך) של זוגות מפתח-ערך. המפתחות חייבים להיות ייחודיים ובלתי ניתנים לשינוי.
  • קבוצות (Sets): אוסף לא מסודר של איברים ייחודיים ובלתי ניתנים לשינוי. שימושיות לבדיקת חברות, הסרת כפילויות ופעולות קבוצתיות.

סקירה והשוואה של מבני הנתונים המרכזיים

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

רשימה (List)

מאפיינים: מסודרת, ניתנת לשינוי, מאפשרת כפילויות. מיוצגת באמצעות סוגריים מרובעים [].
שימושים נפוצים: אחסון אוסף של פריטים שסדרם חשוב, רשימת קניות, רשימת שמות, ערימה (stack) או תור (queue).

טאפל (Tuple)

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

מילון (Dictionary)

מאפיינים: אוסף של זוגות מפתח-ערך. המפתחות ייחודיים ובלתי ניתנים לשינוי. הערכים יכולים להיות מכל טיפוס. מסודר מגרסה 3.7. מיוצג באמצעות סוגריים מסולסלים {}.
שימושים נפוצים: אחסון נתונים הדורשים גישה מהירה לפי מפתח (למשל, פרטי משתמש לפי ת"ז, מילון מונחים), ייצוג אובייקטים עם תכונות.

קבוצה (Set)

מאפיינים: לא מסודרת, ניתנת לשינוי (אך איבריה חייבים להיות בלתי ניתנים לשינוי), מאפשרת רק איברים ייחודיים. מיוצגת באמצעות סוגריים מסולסלים {} (ללא זוגות מפתח-ערך) או הפונקציה set().
שימושים נפוצים: הסרת כפילויות מרשימה, בדיקת חברות יעילה, פעולות קבוצתיות (איחוד, חיתוך, הפרש).

בחירת מבנה הנתונים הנכון ויעילות

בחירת מבנה הנתונים הנכון והשפעתה על יעילות הקוד: זוהי נקודה קריטית בבחינות! לעיתים קרובות, שאלה תציג בעיה ותדרוש מכם לבחור את מבנה הנתונים המתאים ביותר לפתרון, תוך נימוק הבחירה והתייחסות ליעילות. בחירה שגויה עלולה להוביל לקוד איטי ולא יעיל, במיוחד עם כמויות גדולות של נתונים. הבנת מורכבות הזמן (Time Complexity) של פעולות שונות עבור כל מבנה היא המפתח.

שיקולים בבחירה:

  • האם הסדר חשוב? אם כן, רשימה או טאפל. אם לא, מילון או קבוצה.
  • האם הנתונים ישתנו? אם כן, רשימה, מילון או קבוצה. אם לא, טאפל.
  • האם יש צורך בגישה מהירה לפי מפתח? אם כן, מילון.
  • האם יש צורך באיברים ייחודיים בלבד? אם כן, קבוצה.
  • יעילות פעולות:
    • חיפוש איבר: במילון ובקבוצה, חיפוש הוא בממוצע ב-O(1) (זמן קבוע). ברשימה או טאפל, חיפוש הוא ב-O(n) (זמן ליניארי).
    • הוספה/מחיקה: ברשימה, הוספה/מחיקה בסוף היא ב-O(1), אך באמצע או בתחילת הרשימה היא ב-O(n). במילון ובקבוצה, הוספה/מחיקה היא בממוצע ב-O(1).

דוגמאות לבחירה:

  • לרשימת ציונים של סטודנטים שצריך לעדכן ולמיין: רשימה (List).
  • לפרטי משתמש (שם, גיל, עיר) שצריך לגשת אליהם לפי שם משתמש: מילון (Dictionary).
  • לרשימת מילים ייחודיות בקובץ טקסט: קבוצה (Set).
  • לייצוג נקודה במישור (x, y) שאין לשנות את קואורדינטותיה: טאפל (Tuple).

שאלות לדיון

  • נתונה רשימה של מספרים שלמים. כיצד תמצאו את כל המספרים הייחודיים ברשימה זו בצורה היעילה ביותר? נמקו את בחירתכם במבנה הנתונים.
  • הסבירו את ההבדלים המהותיים בין רשימה (List) לטאפל (Tuple) בפייתון. מתי תבחרו להשתמש בכל אחד מהם? תנו דוגמה לכל מקרה.
  • אתם מפתחים מערכת לניהול מלאי של חנות. לכל מוצר יש מספר קטלוגי ייחודי, שם, מחיר וכמות במלאי. איזה מבנה נתונים מובנה בפייתון הייתם בוחרים כדי לאחסן את נתוני המוצרים, ומדוע?
  • הסבירו מדוע מפתחות במילון (Dictionary) חייבים להיות אובייקטים בלתי ניתנים לשינוי (immutable). תנו דוגמה למפתח חוקי ולמפתח לא חוקי.

נקודות לתשובת מודל

  • הבנת המאפיינים: התייחסות למאפיינים כמו שינוי (mutability), סדר (order), וייחודיות (uniqueness) של כל מבנה נתונים.
  • יעילות פעולות: ניתוח מורכבות הזמן (Time Complexity) של פעולות נפוצות (חיפוש, הוספה, מחיקה) עבור מבני הנתונים השונים.
  • בחירה מנומקת: הצגת שיקולים ברורים לבחירת מבנה נתונים מסוים לבעיה נתונה, תוך התייחסות ליתרונותיו וחסרונותיו בהקשר הספציפי.
  • דוגמאות קוד: הדגמה באמצעות קוד פייתון קצר וברור הממחיש את השימוש במבנה הנתונים ואת הפעולות עליו.
  • התייחסות למגבלות/קצוות: ציון מקרים מיוחדים או מגבלות (למשל, מפתחות במילון חייבים להיות immutable).
מצאתם טעות או שחסר משהו?
→ הקודמת
יסודות פייתון
הבאה ←
בקרת זרימה ופונקציות