רשימות – פעולות נוספות

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

מיון והיפוך ערכים

לצורך הדוגמה, נייצר רשימה המכילה מילים שונות

באמצעות שימוש במתודה reverse אנו יכולים להפוך את סדר הערכים ברשימה

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

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

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

אם נרצה למיין דווקא מהערך הגדול ביותר לקטן ביותר, נוכל להשתמש בפרמטר reverse:

במידה ונרצה לקבל את הערכים ברשימה ממוינים אך בלי לשנות את הרשימה עצמה, נוכל להשתמש בפונקציה הכללית sorted אשר פועלת בצורה דומה ל-sort  אך מחזירה חישוב ולא נוגעת ברשימה המקורית (ולכן את התוצאה שלה אפשר להדפיס או להציב במשתנה בעוד שהרשימה המקורית נשארת זהה)

רשימות מקוננות

רשימות יכולות להכיל סוגים רבים של ערכים, וזה כולל גם רשימות אחרות. בדוגמה הבאה, אפשר לראות שהערך החמישי ברשימה (אינדקס 4) מכיל רשימה אשר מכילה את הערכים 1,2,3.

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

בדוגמה הזאת יצרנו רשימה של רשימות – כל איבר ברשימה הראשית (lists) הוא בעצמו רשימה המכילה ערכים.

שימוש ב-slicer כדי להחזיר מיקום מסוים לא יחזיר לנו את הערכים שנמצאים ברשימה אלא ממש את האובייקט עצמו

כדי להגיע לערכים שבתוך הרשימה הפנימית, נבצע "חיתוך על חיתוך" בצורה הבאה

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

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

ואפילו להשתמש בפונקציות או מתודות (אם אנחנו בטוחים לגבי סוג הערך)