1.3 מבני נתונים הרצאה
- אנחנו משתמשים במשתנים כדי לשמור מידע.
- לכל משתנה יש סוג, אנחנו קוראים לזה "סוג משתנה" או באנגלית "data type"
- יש המון סוגים של datatypes, בשיעור הזה אנחנו נעבור על החשובים.
משתנים¶
- כשאנחנו מגדירים משתנים, נוכל להשתמש בהם רק אחרי שהגדרנו אותם, למשל בקוד הבא:
- כפי שניתן לראות בקוד למעלה, רק אחרי שהגדרנו את x נוכל להשתמש בו.
- אם ננסה להשתמש בx לפני שהגדרנו אותו, נקבל שגיאה מפייתון והתוכנה שכתבנו תקרוס.
- אתם מוזמנים לנסות להריץ את הקוד ולראות שתחזור שגיאה.
מספר שלם¶
- מספר שלם או באנגלית "integer" הוא סוג של משתנה שקיים בפייתון, אותו כבר הספקנו להכיר כ-"int" בפרק הקודם.
מספר עשרוני¶
- מספר עשרוני או באנגלית "float" הוא סוג של משתנה שקיים בפייתון שמייצג מספרים עשרוניים, למשל: 3.14, 2.71, 1.61. המילה אשר מייצגת float היא פשוט float כמו שהמילה שמייצגת integer היא int.
מחרוזות¶
- מחרוזת היא רשימה של אותיות
פעולות נפוצות במחרוזות: -
חיבור בין מחרוזות:
-
כפל מחרוזות:
-
קבלת אורך מחרוזת, כלומר, מספר התוים במחרוזת מסוימת.
-
גישה לאות מסויימת במחרוזת.
-
שימו לב, התו הראשון מיוצג על ידי הספרה 0 ולא 1, והסיבה לכך, בגדול, היא בגלל שככה המחשב קורא קוד.
-
חיתוך מחרוזת.
- הפעולה תחתוך את מן המחרוזת "Python" את התוים הנמצאות מאחורי המספר 1, המספר 2, המספר 3 ושומר אותם כמחרוזת חדשה.
-
שימו לב, אפילו שכתוב 1:4, התיו הנמצא מאחורי המקום 4 לא ישמר כחלק מהמחרוזת החדשה מכיוון שזה שומר מן הספר הראשונה עד ספרה אחת לפני האחרונה.
-
פיצול מחרוזת לרשימה, מפצל על פי פרמטר - במקרה הזה מפצל מרווחים.
- ניתן לבצע פעולה זו על ידי הפונקציה ( )split.
-
בדוגמה למטה, הפעולה ( )split. מוחקת את הרווחים הנצאים במשתנה string, שומרת את כל התוים הנמצאים בין רווח לרווח ושומרת אותם כאיברים נפרדים ברשימה.
-
חיבור מחרוזת מרשימה, מחבר על פי פרמטר שאנחנו מגדירים.
- בדוגמה למטה הכנו רשימה בשם word_list.
-
לאחר מכן השתמשנו בפעולה ( )join. בשביל לחבר את כל המילים ברשימה word_list בשילוב של רווח בין מילה למילה.
-
הפיכת מחרוזת מאותיות קטנות לגדולות וההפך.
-
אותיות מיוחדות:
print("Hello \n World") # will output: Hello # world print("Hello \t World") # will output: Hello World print("Hello \"World\" .") # will output: Hello "World" . print("i can print a backslash: \\") # will output: i can print a backslash: \ print(r"i can print special charecters: \n \ ") # will output: i can print special charecters: \n \
רשימה¶
- רשימה ב-Python היא מבנה נתונים שמאפשר לאחסן אוסף סדור של פריטים (items), שיכולים להיות מסוגים שונים. הרשימה מוגדרת באמצעות סוגריים מרובעים
[], והפריטים מופרדים בפסיקים.
פעולות נפוצות עם רשימות: -
יצירת רשימה:
-
גישה לאיברים ברשימה לפי מיקום ברשימה:
-
שימו לב שזה דומה לחלוטין למציאת רכיב במחרוזת כפי שהוזכר קודם לכן.
-
חיתוך רשימה:
-
שימו לב שזה דומה לחלוטין לחיתוך מחרוזת כפי שהוזכר קודם לכן.
-
חיבור רשימות:
-
כפל רשימות:
-
קבלת אורך רשימה (כמה איברים נימצאים ברשימה):
-
הוספת איבר לסוף הרשימה:
-
מחיקת איבר מסויים מהרשימה:
-
סידור רשימה:
- זוהי דרך לסדר רשימה על פי סדר עולה מסוים.
- בדוגמה 1 ניתן לראות שהמחשב יסדר את המספרים מהקטן לגדול ובדוגמה השנייה המחשב יסד את האותיות לפי סדר ה-ABC
מילון¶
- מילון ב-Python הוא מבנה נתונים שמאפשר לאחסן זוגות של מפתחות וערכים. כל מפתח (key) במילון הוא ייחודי ומצביע על ערך מסוים (value). המילון ב-Python מוגדר באמצעות סוגריים מסולסלים
{}ומפרידים בין מפתח לערך שלו על ידי " : ".
פעולות נפוצות עם מילון: - יצירת מילון:
-
שימו לב שניתן לרשום מילון בשני הדרכים המוצגות למטה, כלומר, שני הדרכים קבילות.
-
גישה לערך של מפתח במילון:
-
שינוי ערך של מפתח במילון:
-
מחיקת מפתח מהמילון + גישה למפתח שמחקנו
-
גישה לרשימה של המפתחות של המילון
-
גישה לרשימה של הערכים של המילון
-
מיזוג 2 מיליונים למילון אחד:
סט (set)¶
סט (set) ב-Python הוא אוסף לא סדור של פריטים ייחודיים, כלומר, הוא לא מאפשר כפילויות. הוא מוגדר באמצעות סוגריים מסולסלים {} או באמצעות הפונקציה set(). הסטים ב-Python אינם תומכים בגישה לפי אינדקס כמו רשימות, כלומר, אי אפשר לגשת לערך מסוים בסט על ידי המקום הסידורי שלו.
בנוסף, הם מסודרים תמיד. האיברים של סטים יהיו מסודרים לפי הערך שלהם לא כמו רשימות, למשל אם נגדיר את הסט הבא: {2, 1, 3} הוא יתורגם ל {3, 2, 1}.
פעולות נפוצות על סטים:
- יצירת סט:
- הוספת איברים לסטים:
-
בדרך זו תוכלו להוסיף איברים לסטים שלכם.
-
מחיקת איברים מסטים
-
פעולות נפוצות על 2 סטים במקביל:
- פעולת union - מחזיר סט של שילוב שני הסטים.
- פעולת intersection (חיתוך) - מחזיר סט של רק האיברים שזהיים בין שני הסטים.
- פעולת difference - מחזיר סט של האיברים של הסט הראשון השונים מן האיברים של הסט השני (לא מחזיר את הסט של האיברים הנמצאים בסט השני וואינם נמצאים בראשון).
- פעולת symmetric_difference - מחזיר סט של האיברים השונים בין שני הסטים.
set1 = {1, 2, 3, 4, 5} set2 = {3, 4, 5, 6, 7} a = set1.union(set2) print(a) # will print: {1, 2, 3, 4, 5, 6, 7} b = set1.intersection(set2) print(b) # will print: {3, 4, 5} c = set1.difference(set2) print(c) # will print: {1, 2} d = set1.symmetric_difference(set2) print(d) # will print: {1, 2, 6, 7}
-
יצירת העתק של הסט - תמיד תשתמשו בזה כשאתם רוצים להעתיק סט!
-
מחיקת כל האיברים בסט:
- הסיבה שבגללה המחשב מחזיר None היא בגלל שבעצם הדפסנו כלום, המשתנה x, במילים אחרות, שווה לשום דבר.
טאפל (tuple)¶
טאפלים הם בדיוק כמו רשימות, רק שהם "לא ניתנים לשינוי" או באנגלית "immutable, מה זה אומר?
זה אומר שאחרי שאנחנו מגדירים טאפל, אנחנו לא יכולים לשנות את האיברים בטאפל, לא להוסיף איברים, ולא למחוק.
בפייתון יש המון מצבים מסויימים שבהם עדיף להשתמש בטאפלים מאשר ברשימות וחשוב להכיר אותם. (אנחנו נכיר אותם בהמשך הקורס.)
פעולות נפוצות על טאפלים:
- יצירת טאפלים:
-
גישה לאיברים בטאפל:
-
חיתוך טאפל:
-
חיבור וכפל טאפלים:
-
קבלת האורך של טאפל:
-
בדיקת האם איבר בטאפל:
-
יחזיר אמת או שקר בהתאם להאים האיבר באמת נמצא בטופל או לא.
-
אז מתי משתמשים בטאפלים? בוא נראה דוגמה אחת נפוצה:
- הפעולת פיצול למעלה נקראת "unpacking", ובדרך כלל אנחנו משתמשים בטאפלים בשביל unpacking.
רשימות נגד טאפלים נגד סטים¶
| התנהגות | רשימה | סט | טאפל |
|---|---|---|---|
| ניתן לשינוי | ניתן לשינוי | ניתן לשינוי | לא ניתן לשינוי |
| סדר | לא חייב להיות מסודר | תמיד יהיה מסודר | לא חייב להיות מסודר |
| יחודיות | איברים יכולים לחזור אחד על השני | איברים לא יכולים לחזור אחד על השני | איברים יכולים לחזור אחד על השני |
| דוגמה מתי להשתמש | כמעט כל הזמן | כאשר אנחנו רוצים לסדר רשימה או למחוק את האיברים החוזרים | כאשר אנחנו רוצים לעשות פיצול |
סיקואנס¶
-
סיקואנס או באנגלית "sequence" היא תכונה שקיימת לdatatypes, התכונה הזו קיימת לdatatypes כמו רשימה, מחרוזת ומילון.
-
כל סיקואנס אנחנו יכולים לחצות (slicing).
- range slicing
- step based slicing
מיוטאבילטי¶
- מיוטאבילטי או באנגלית "mutability" היא תכונה בפייתון של datatypes שמציינת האם האובייקט ניתן לשינוי אחרי שנוצר.
- במילים פשוטות יותר, אם אובייקט הוא "mutable" הוא יכול לשתנות
- ואם האובייקט הוא "immutable" הוא לא ניתן לשינוי אחרי שנוצר, כמו טאפל.
דוגמאות:
- אובייקטים מיוטאבילים: רשימה, מילון, וסטים. אפשר להוסיף, להוריד ולשנות איברים באובייקטים האלו.
- אובייקטים immutable: טאפלים, ומחרוזות. אחרי שאנחנו יוצרים אותם איי אפשר לשנות את הערך שלהם.
פיצול (unpacking)¶
- בפייתון אפשר לפצל רשימות וכדומה למשתנים קטנים יותר.
- דוגמה לשימוש בunpacking עם split
כלום - None¶
- כלום.
- בעתיד נראה איך המילה השמורה הזו (keyword) משמשמת אותנו.