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, שומרת את כל התוים הנמצאים בין רווח לרווח ושומרת אותם כelements נפרדים ברשימה.
-
חיבור מחרוזת מרשימה, מחבר על פי פרמטר שאנחנו מגדירים.
- בדוגמה למטה הכנו רשימה בשם 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), שיכולים להיות מסוגים שונים. הרשימה מוגדרת באמצעות סוגריים מרובעים
[], והפריטים מופרדים בפסיקים.
פעולות נפוצות עם רשימות: -
יצירת רשימה:
-
גישה לelements ברשימה לפי מיקום ברשימה:
-
שימו לב שזה דומה לחלוטין למציאת רכיב במחרוזת כפי שהוזכר קודם לכן.
-
חיתוך רשימה:
-
שימו לב שזה דומה לחלוטין לחיתוך מחרוזת כפי שהוזכר קודם לכן.
-
חיבור רשימות:
-
כפל רשימות:
-
קבלת אורך רשימה (כמה elements נימצאים ברשימה):
-
הוספת element לסוף הרשימה:
-
מחיקת element מסויים מהרשימה:
-
סידור רשימה:
- זוהי דרך לסדר רשימה על פי סדר עולה מסוים.
- בדוגמה 1 ניתן לראות שהמחשב יסדר את המספרים מהקטן לגדול ובדוגמה השנייה המחשב יסד את האותיות לפי סדר ה-ABC
מילון¶
- מילון ב-Python הוא מבנה נתונים שמאפשר לאחסן זוגות של keys וערכים. כל key במילון הוא ייחודי ומצביע על ערך מסוים (value). המילון ב-Python מוגדר באמצעות סוגריים מסולסלים
{}ומפרידים בין key לערך שלו על ידי " : ".
פעולות נפוצות עם מילון: - יצירת מילון:
-
שימו לב שניתן לרשום מילון בשני הדרכים המוצגות למטה, כלומר, שני הדרכים קבילות.
-
גישה לערך של key במילון:
-
שינוי ערך של key במילון:
-
מחיקת key מהמילון + גישה לkey שמחקנו
-
גישה לרשימה של הkeys של המילון
-
גישה לרשימה של הערכים של המילון
-
מיזוג 2 מיליונים למילון אחד:
סט (set)¶
סט (set) ב-Python הוא אוסף לא סדור של פריטים ייחודיים, כלומר, הוא לא מאפשר כפילויות. הוא מוגדר באמצעות סוגריים מסולסלים {} או באמצעות הפונקציה set(). הסטים ב-Python אינם תומכים בגישה לפי אינדקס כמו רשימות, כלומר, אי אפשר לגשת לערך מסוים בסט על ידי המקום הסידורי שלו.
בנוסף, הם מסודרים תמיד. הelements של סטים יהיו מסודרים לפי הערך שלהם לא כמו רשימות, למשל אם נגדיר את הסט הבא: {2, 1, 3} הוא יתורגם ל {3, 2, 1}.
פעולות נפוצות על סטים:
- יצירת סט:
- הוספת elements לסטים:
-
בדרך זו תוכלו להוסיף elements לסטים שלכם.
-
מחיקת elements מסטים
-
פעולות נפוצות על 2 סטים במקביל:
- פעולת union - מחזיר סט של שילוב שני הסטים.
- פעולת intersection (חיתוך) - מחזיר סט של רק הelements שזהיים בין שני הסטים.
- פעולת difference - מחזיר סט של הelements של הסט הראשון השונים מן הelements של הסט השני (לא מחזיר את הסט של הelements הנמצאים בסט השני וואינם נמצאים בראשון).
- פעולת symmetric_difference - מחזיר סט של הelements השונים בין שני הסטים.
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}
-
יצירת העתק של הסט - תמיד תשתמשו בזה כשאתם רוצים להעתיק סט!
-
מחיקת כל הelements בסט:
- הסיבה שבגללה המחשב מחזיר None היא בגלל שבעצם הדפסנו כלום, המשתנה x, במילים אחרות, שווה לשום דבר.
טאפל (tuple)¶
טאפלים הם בדיוק כמו רשימות, רק שהם "לא ניתנים לשינוי" או באנגלית "immutable, מה זה אומר?
זה אומר שאחרי שאנחנו מגדירים טאפל, אנחנו לא יכולים לשנות את הelements בטאפל, לא להוסיף elements, ולא למחוק.
בפייתון יש המון מצבים מסויימים שבהם עדיף להשתמש בטאפלים מאשר ברשימות וחשוב להכיר אותם. (אנחנו נכיר אותם בהמשך הקורס.)
פעולות נפוצות על טאפלים:
- יצירת טאפלים:
-
גישה לelements בטאפל:
-
חיתוך טאפל:
-
חיבור וכפל טאפלים:
-
קבלת האורך של טאפל:
-
בדיקת האם element בטאפל:
-
יחזיר אמת או שקר בהתאם להאים הelement באמת נמצא בטופל או לא.
-
אז מתי משתמשים בטאפלים? בוא נראה דוגמה אחת נפוצה:
- הפעולת פיצול למעלה נקראת "unpacking", ובדרך כלל אנחנו משתמשים בטאפלים בשביל unpacking.
רשימות נגד טאפלים נגד סטים¶
| התנהגות | רשימה | סט | טאפל |
|---|---|---|---|
| ניתן לשינוי | ניתן לשינוי | ניתן לשינוי | לא ניתן לשינוי |
| סדר | לא חייב להיות מסודר | תמיד יהיה מסודר | לא חייב להיות מסודר |
| יחודיות | הelements יכולים לחזור אחד על השני | הelements לא יכולים לחזור אחד על השני | הelements יכולים לחזור אחד על השני |
| דוגמה מתי להשתמש | כמעט כל הזמן | כאשר אנחנו רוצים לסדר רשימה או למחוק את הelements החוזרים | כאשר אנחנו רוצים לעשות פיצול |
סיקואנס¶
-
סיקואנס או באנגלית "sequence" היא property שקיימת לdatatypes, הproperty הזו קיימת לdatatypes כמו רשימה, מחרוזת ומילון.
-
כל סיקואנס אנחנו יכולים לחצות (slicing).
- range slicing
- step based slicing
מיוטאבילטי¶
- מיוטאבילטי או באנגלית "mutability" היא property בפייתון של datatypes שמציינת האם האובייקט ניתן לשינוי אחרי שנוצר.
- במילים פשוטות יותר, אם אובייקט הוא "mutable" הוא יכול לשתנות
- ואם האובייקט הוא "immutable" הוא לא ניתן לשינוי אחרי שנוצר, כמו טאפל.
דוגמאות:
- אובייקטים מיוטאבילים: רשימה, מילון, וסטים. אפשר להוסיף, להוריד ולשנות elements באובייקטים האלו.
- אובייקטים immutable: טאפלים, ומחרוזות. אחרי שאנחנו יוצרים אותם איי אפשר לשנות את הערך שלהם.
פיצול (unpacking)¶
- בפייתון אפשר לפצל רשימות וכדומה למשתנים קטנים יותר.
- דוגמה לשימוש בunpacking עם split
כלום - None¶
- כלום.
- בעתיד נראה איך המילה השמורה הזו (keyword) משמשמת אותנו.