רשימות – ניהול ערכים

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

הוספת ערכים לרשימה

כאשר אנו עובדים עם רשימה קיימת, נוכל לשנות בה ערכים בכל מיקום קיים

לעומת זאת, אם ננסה להגדיר ערך במיקום שאינו קיים עדיין נקבל שגיאה

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

אבל יש לנו דרכים אחרות להוסיף ערכים לרשימות.

ראינו שאפשר לשרשר רשימות וליצור מהן רשימה אחת. לכן, אם אני רוצה להוסיף ערך לרשימה מסוימת אני יכול להציב אותו בתוך רשימה אחרת ולשרשר ביניהן

היתרון בשיטה הזאת היא שאני יכול להוסיף כמה ערכים בבת אחת

אם נחבר רשימה עם מחרוזת נקבל את התוצאה הבאה

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

כדי להוסיף את המחרוזת כערך יחיד נוכל לשרשר אותו במחרוזת או להשתמש ב-append.

דרך נוספת להכניס ערכים לתוך רצף מסוג רשימה היא שימוש במתודה insert.

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

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

עידכון ערכים קיימים

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

הסרת ערכים מתוך רשימה

המתודה remove מאפשרת לנו להסיר ערכים קיימים מתוך רשימה. כל מה שצריך לעשות זה לתת לה כפרמטר את הערך ממנו נרצה להפטר.

חשוב לקחת בחשבון שאם הערך מופיע יותר מפעם אחת ברשימה הפקודה הזאת תסיר רק את המופע הראשון שלו.

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

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

כברירת מחדל pop תמיד תשלוף את הערך האחרון ברשימה (מיקום 1-)

אם אנחנו רוצים להוציא ערך אחר, לאו דווקא את האחרון, אפשר לתת ל-pop כפרמטר את המיקום המבוקש