
append או השמה לאינדקס. טאפל תופס פחות מקום מרשימה, ולכן מחזירים בו ערכים מפונקציות.dir מציג את הפעולות, כולל keys, values ו-update. השמה לערך חדש מוסיפה מפתח, ו-del מוחק מפתח.b = a אינה יוצרת עותק. כדי לקבל עותק נפרד משתמשים בפונקציה copy.append לטאפל. ניסיון לשנות את הטאפל עצמו מוביל לשגיאה.in נתמך במחרוזות, במילונים וברשימות. בדיקה אם מפתח נמצא במילון נעשית כך: key in d.הטקסט המלא של הדקות הראשונות בהרצאה «Dictionary» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם, אנחנו נדבר עכשיו על טאפלים ודיקשנריז, שהם מבנה נתונים בסיסיים נוספים בשפת פייתון. אז בואו נתחיל, ניכנס לאינטרפרטר שלנו.
מה זה טאפל? טאפל הוא ממש ממש דומה לליסט, כלומר הוא גם קונטיינר שמכיל מספר קונטיינרים נוספים בתוכו.
ההבדל בין ליסט לטאפל, שטאפל לא יכול להשתנות לאחר שהוא נוצר. בואו נתחיל עם דוגמה פשוטה כדי להבין את הדבר. כדי להגדיר טאפל נעשה אותו דבר כמו ליסט פשוט נשתמש בסוגריים עגולים במקום סוגריים מרובעים למשל יש לנו עכשיו פה טאפל שמכיל את המספרים 1 עד 5 בוא נדפיס אותו ונראה איך הוא נראה על המסך
נראה מאוד דומה לליסט אז כפי שאתם רואים אנחנו רואים על המסך את הטאפל שלנו והוא מאוד דומה לליסט נשאלת השאלה למה צריך הוא מאוד דומה לליסט והוא גם קונטיינר ההבדל הגדול בין טאפל לליסט שטאפל הוא לא ניתן לשינוי לאחר מה זאת אומרת? בואו ניקח לדוגמה ליסט שמכיל את הערכים 0 עד 5 אם עכשיו נרצה להוסיף ערך לליסט, פשוט נעשות
b append נרצה להוסיף נגיד 6, נדפיס את b, ויש לנו את 6 לעומת זאת אם ננסה לעשות אותו דבר ל-a, נקבל שגיאה טאפל אובייקט has no attribute append כלומר אי אפשר בכלל, אין לו פונקציה שנקראת append אז בואו נגיד אוקיי, בואו פשוט נשתמש ננסה להשתמש באופרטור של הסוגריים
אז a במקום ה-1 שווה 5 נקבל שגיאה אובייקט מסוג טאפל לא תומך בהשמה כלומר האובייקט טאפל הוא מאוד דומה לליסט אבל לא ניתן לשינוי מה היתרון של הדבר הזה?
בעצם טאפל הוא מבנה שנמצא יותר בתור דברים שאפשר להחזיר מפונקציות כלומר פונקציה רוצה להחזיר איזשהו ערך והיא לא רוצה שישנו אותו אז היא מחזירה טאפל.
טאפל הוא דומה לליסט כפי שראינו, אבל הוא לוקח פחות מקום בזיכרון, ובבחינה הזאת הוא חוסך מקום, ומשתמשים בו בכל מיני פונקציות פנימיות שנראה בהמשך.
חשוב לשים לב אבל, שלמרות שטאפל לא תומך בשינוי, כל האופרציות שראינו בעבר נתמכות בטאפל, למשל A במקום ה-0, או A במקום ה-1, כל עובד גם בטאפל, הזאת הוא תואם ליסט ב-100% שימו לב שגם פה אפשר לעשות dir על a ושימו לב שבעצם אין לו פונקציות חוץ מ-count ו-index כל הפונקציות שנמצאות בליסט של
ה-reverse וה-index וה-insert לא קיימות בטאפל עכשיו נדבר על dictionaries רק לפני כן עוד משהו קטן על טאפלים לכאורה הייתם חושבים שטאפל זה קונסטנט אבל הדבר הזה לא מדויק כלומר הוא כן מדויק ואני אסביר מה קורה אם יש לנו טאפל שמכיל בתוכו ליסט?
למשל, יש לנו את הטאפל A שמכיל בתוכו ליסט וק ומכיל בתוכו את המספר 5. גם, תכף נסביר גם למה שמנו את 5. אם נדפיס את A, לכאורה טאפל רגיל.
ננסה לעשות השמה ל-A במקום ה-1 ולא נצליח. אבל מה יקרה אם ננסה להוסיף לליסט שנמצא בתוך הטאפל? האם זה ייתן לנו או לא?
מצד אחד, טאפל הוא קונסטנט, הוא לא תומך בהשמה. מצד שני, הוא מכיר בתוכו ליסט שהוא כן תומך בהשמה. נראה שבעצם הדבר הזה נתמך.
כלומר, יש לנו פה עיוור שהוא קונסטנט, אבל לא באמת קונסטנט. אנחנו נדבר בהמשך על המשמעות ועל הניהול זיכרון ולמה בעצם הדבר הזה כן מותר, אבל כן חשוב לציין שהטאפל עצמו הוא לא ניתן לשינוי, אבל כל הדברים שבתוך הטאפלים הם כן ניתנים לשינוי.
כלומר זה לא קונסט כמו בשפת C או בשפות אחרות במובן הנרחב. זה איזשהו קונסט מסוים, כלומר ניסיון לשנות את הטאפל עצמו לא יצליח, אבל ניסיון לשנות דברים בתוך הטאפל יצליח גם יצליח.
שימו לב שאם אתם רוצים לשנות את הטאפל עצמו לא ניתן, אבל מה שניתן לעשות זה פשוט ליצור העתק שלו על ידי שימוש בפונקציה ליסט, ונקבל עכשיו ליסט ואז לא תהיה לנו בעיה לעשות את הפקודה הבאה, כי בעצם עכשיו אנחנו נמצאים בליסט, לא בתוך טאפ. עכשיו נמשיך ונדבר על דיקשנריז.
אז דיקשנריז או האש, מבנה נתונים שקיים ברוב השפות המודרניות, ג'אווה סקריפט ו-C-Sharp, ה-STL של C++, זה Key Value, כלומר זה שהוא מבנה נתונים שיש לנו Key, מפתח שמצביע על Value.
איך מגדירים דיקשנרי בפייתון? מאוד פשוט, מאוד דומה לכל מה שראינו בעבר. בואו נגדיר d שווה ל-dictionary, איך מתחילים?
פשוט משתמשים בסוגריים מסולסלים, קצת קשה לראות את זה בבאש הזה. בואו רגע נכתוב את זה בנוטפד פלוס פלוס, שזה ייראה יותר נורמלי.
במקום לעבור לנוטפד פלוס פלוס, פשוט נשנה את הגופן של החלון קונסולו הזה, כדי שנוכל לראות יותר טוב שזה סוגריים מסולסלים. אז נלך פה קליק ימני על הפינה הימנית, נלך פה ל-properties, נשנה את הגופן לקונסולאס, נשנה גם את הגופן שיהיה קצת יותר גדול כן, קונסולוס נראה בסדר, נעשה אוקיי עכשיו כבר רואים הרבה יותר טוב שמדובר בסוגריים
מסוסלים בואו גם כבר נעלה את המסך למעלה, נצא ונעשה תיקוי של המסך וניכנס שוב לפייתון ונתחיל לדבר קצת על Dictionaries אז כמו שאמרתי, Dictionaries זה מבנה נתונים של Key Value בואו נתחיל בהגדרה מאוד פשוטה של Dictionary אז נגיד שניצור דיקשנרי שנקרא לו a שווה לתחסוגר מסולסל
ונגדיר דיקשנרי שמכיל בתוכו key של הסטרינג 1 מצביע על המספר 1 אז יש לנו דיקשנרי שיש לו key וvalue שימו לב שאפשר גם שה-key יהיה מסוג מספר כלומר 2 מצביע על 2 אין לנו איזושהי הגבלה שהקרבכות לא כרגע מה שאנחנו רואים שמשהו לא יכול להיות קי.
דיקשנרי הוא מבנה נתונים שתומך בגישה מאוד מהירה, גישה ומחיקה ושינוי בזמן מאוד מהיר. מבחינת פונקציות שיש לנו בדיקשנרי, אז אם נשתמש ב-dir, נוכל לראות שיש לנו update שזה מעדכן, לוקח שני דיקשנריז ומעדכן ביניהם.
נוכל לעשות a.keys ולראות את כל הדיקשנריז, את כל ה-keys של, כלומר כל המפתחות של. הדיקשנרי הזה ונוכל גם לעשות ווליוז ולראות את הערכים מבחינת דברים נוספים שכדאי לדעת על דיקשנרי אז דיקשנרי זה כמו ליסטים כמובן הם ניתנים לשינוי כדי לעשות השמה לתוך a למשל אני רוצה עכשיו להוסיף ערך חדש ל-a אז a במקום ה-3 שווה ל-3 ובעצם הוספנו ל-a אם אנחנו רוצים למחוק מ-a משהו אז אפשר לעשות del a במקום ה-3
ומחקנו משהו מ-a עוד דברים שכדאי לדעת על dictionaries זה שיש פונקציה שנקראת copy אם רוצים לקחת dictionary ולשנות וליצור העתק שלו אז צריך שיש בפונקציה copy למה אי אפשר סתם לעשות שווה אני אסביר לכם בעזרת דוגמה מאוד פשוטה אז יש לנו את a ש-a שווה לדיקשנרי שאתם רואים על המסך בואו עכשיו ניצור דיקשנרי ששמו b ששווה
לa עכשיו בעצם מה שעשינו פה עשינו שלו קופי מה זאת אומרת אם נעשה b במקום ה3 שווה 3 שינינו את b בהחלט האם שינינו גם את a כן עכשיו זה לא בהכרח מה שרצינו יכול להיות שמה שרצינו זה לשנות רק את b או רק את a כדי שיהיה לנו ערך שהוא ייחודי מה שצריך לעשות זה b בוא נעשה c שווה לb נקודה קופי עכשיו אם אם אנחנו נשנה את b,
אז שינינו את b, שינינו את a, אבל c לא השתנה. אז מאוד חשוב לשים לב. התופעה הזאת קיימת גם בליסטים, אנחנו נדבר עליה בהרחבה בהמשך.
עכשיו הייתי רוצה להראות איזושהי דוגמה קצת יותר נחמדה. אני אכתוב כרגע פונקציה, בעצם לפונקציה אני אכתוב איזושהי פרוצדורה, פונקציה, כן, שיהיה, שהיא עוברת על ליסט ומכניסה, סופרת את מספר המילים בליסט.
למשל, בואו ניצור ליסט שמכיל 0, 1, 2, 3, 4, 5, 6, אותם איזשהו משהו.