טאפלים (tuple)

טאפלים (tuple)#

טקסט המופיע למטה בסגול מציין קטעים המופיעים בסרטון

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

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

tuple (טאפל) הוא טיפוס מאוד דומה לרשימה - גם הוא אוסף של איברים שיש להם סדר, ואפשר לגשת לכל איבר לפי האינדקס שלו או לעבור עליהם בלולאה.
אבל, בניגוד לרשימה שהיא ניתנת לשינוי (mutable), טאפל הוא immutable. כלומר, לא ניתן לשנות טאפל אחרי שיצרנו אותו.

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

לדוגמא, הטאפל הבא מכיל את ארבע המחרוזות: "dont" "worry" "be" "happy":

t = ("don't", "worry", "be", "happy") 

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

t = ("don't", "worry", "be", "happy") 
print(t[0]) # indexing
print(t[-1]) # backwords indexing
print(t[1:3]) # slicing
don't
happy
('worry', 'be')

אז היכן מתבטא ההבדל בין טאפלים לרשימות?

כדי לענות על כך, נבחן את קטע הקוד הבא, בו נבצע השמה בתוך tuple:

t[1] = 10
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[4], line 1
----> 1 t[1] = 10

TypeError: 'tuple' object does not support item assignment

מדוע קיבלנו שגיאה?

בקטע הקוד ניסינו לבצע השמה של הערך 10 לתוך המקום השני של הטאפל t, אך פעולת ההשמה אינה חוקית, מכיוון שהיא משנה אובייקט tuple שכבר יצרנו, וכפי שאמרנו, הטיפוס tuple הוא immutable.

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

חשבו לדוגמא על מתודת append: פעולה זו מוסיפה אלמנט לרשימה קיימת, כלומר משנה את הרשימה, ולכן לא תהיה מתודה מקבילה כזו עבור tuple.

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

אז מדוע בעצם הטיפוס tuple נחוץ? נראה ש tuple ו list מאוד דומים.

מסתבר שהעובדה שtuple הוא immutable הופכת אותו לשימושי. ביחידה הבאה נראה תרחיש בו נוכל להשתמש בtuple אך לא בlist.