רשימה list
פייתון מאפשרת ארגון מידע בצורות שונות שאחת המרכזיות בהן היא הרשימה (באנגלית list), באמצעותה למשל בנינו פעם תוכנה אולטימטיבית לפתרון סודוקו וגם תוכנות שעזרו לנו לפתור חידות. רשימה מייצרים באמצעות רישום אברי הרשימה בסוגריים מרובעים, כאשר כל איבר מופרד בפסיק (,) , אולם תחילה אנו צריכים לבחור שם לרשימה שלנו (כל זמן שהמילה אינה פקודה בשפת פייתון כמו למשל המילה list שבה אסור להשתמש) -
lista=[5,8,"sababa",-3]
print (lista)
>>>
[5, 8, 'sababa', -3]
אנו רואים שהרשימה יכולה להכיל מספרים, מחרוזות גם רשימות (בתוך רשימות) וגם סוגים נוספים של מידע (סוגים שונים של אובייקטים).
ברשימה יש חשיבות לסדר האיברים או הפריטים המאורגנים בתוכה וכל פריט ברשימה מקבל מספר (index), כאשר השמאלי ביותר הוא הראשון והימני ביותר הוא האחרון. האיבר הראשון ברשימה אינו איבר מספר 1 בפייתון, משום שבשפה הזאת המספור מתחיל מ....אפס, זה מבלבל לעיתים קרובות אבל יש לכך גם יתרונות שיתגלו בהמשך. לכן איבר מספר 1 ברשימה שלנו, שקראנו לה lista הוא המספר 8, ואיך אפשר לגלות את זה ? אפשר לבקש מהמחשב שידפיס את איבר מספר 1 ברשימה lista -
lista=[5,8,"sababa",-3]
print (lista[1])
>>>
8
lista=[5,8,"sababa",-3]
print (lista[0])
>>>
5
אפשר לבקש מהמחשב שידפיס את האיברים מ- 0 עד 3 כאשר המילה "עד" נרשמת באמצעות נקודתיים (:) ובמקרה הזה התוכנה תדפיס החל מהאיבר הראשון (איבר 0) אבל לא כולל את איבר מספר 3 (שהוא הרביעי ברשימה)– זה עוד עניין מבלבל בפייתון – דוגמאות עשויות לרכך את הבלבול -
lista=[5,8,"sababa",-3]
print (lista[0:3])
>>>
[5, 8, 'sababa']
עוד אחת
lista=[5,8,"sababa",-3]
print (lista[1:3])
>>>
[8, 'sababa']
רישום נוסף להוראה להדפיס את איברי הרשימה מהראשון עד מספר 3 (לא כולל) היא לרשום נקודתיים (:) בלי הספרה 0 לפני.
lista=[5,8,"sababa",-3]
print (lista[:3])
>>>
[5, 8, 'sababa']
ויש גם דרך מקוצרת לבקש הדפסה מהאיבר מספר 2 עד הסוף –
lista=[5,8,"sababa",-3]
print (lista[2:])
>>>
['sababa', -3]
העסק בהחלט יכול להיות מבלבל בהתחלה למרות שיש הגיון מסוים שאם אתה מבקש הדפסה של איברי רשימה עד איבר 3 אתה בעצם מקבל שלושה איברים (0,1,2).
הוספה והשמטה של איברים ברשימה
דרך אחת להוסיף איבר לרשימה היא פקודת append -
lista=[1,2,3,4]
lista.append("sababa")
print (lista)
>>>
[1, 2, 3, 4, 'sababa']
מרגע שיצרנו את הרשימה, אנו יכולים לבצע פעולות שונות באמצעות רישום שם הרשימה (lista) ולאחריה נקודה ושם הפקודה. הפקודה append מוסיפה איבר המופיע בסוגריים בסוף הרשימה בצידה הימיני.
אפשר גם ככה להוסיף איבר לסוף הרשימה –
lista=[1,2,3,4]
lista+=["sababa"]
print (lista)
>>>
[1, 2, 3, 4, 'sababa']
כדי להוסיף יותר מאיבר אחד לסוף הרשימה נשתמש בפקודה extend -
lista=[1,2,3,4]
lista.extend([5,6,7]) print (lista)
>>>
[1, 2, 3, 4, 5, 6 ,7]
החלפה של איבר במיקום מסוים –
lista=[1,2,3,4]
lista[2]=9 print (lista)
>>>
[1, 2, 9, 4]
הוספה של איבר למיקום מסוים (insert)
lista=[1,2,3,4]
lista.insert(2,9) print (lista)
>>>
[1, 2, 9, 3, 4]
בתוכנית למעלה אנו הוספנו את הספרה 9 לתוך המיקום מס' 2 (המיקום השלישי ברשימה אם מתחילים מאפס) בלי להוציא את הספרה 3 מהרשימה.
השמטה של האיבר האחרון ברשימה –
lista=[1,2,3,4]
lista.pop()
print (lista)
>>>
[1, 2, 3]
השמטה של איבר מסוים ברשימה, כלומר השמטה של הספרה 2 מהרשימה –
lista=[1,2,3,4]
lista.remove(2)
print (lista)
>>>
[1, 3, 4]
השמטה של איבר שמיקומו ברשימה הוא 2 (האיבר השלישי אם מתחילים לספור מ - 0) -
lista=[1,2,3,4]
lista.remove(lista[2])
print (lista)
>>>
[1, 2, 4]
השמטה של האיבר השני מהסוף-
lista=[1,2,3,4,5,6]
lista.remove(lista[-2])
print (lista)
>>>
[1, 2, 3, 4, 6]
אנו רואים למעלה שאפשר להתייחס למיקומים של איברים ברשימה על פי מיקומם מהסוף באמצעות מספרים שליליים.
אנו יכולים לספור כמה איברים יש לנו ברשימה באמצעות הפקודה len –
lista=[1,2,3,4, 7, 125, "sababa"]
print (len(lista))
>>>
7
במקרה הזה יש לנו 7 איברים המסומנים בפייתון מ- 0 עד 6 מהראשון עד האחרון.
ויש עוד פעולות שניתן לבצע על רשימות כמו להפוך את הסדר שלהן (reverse) לספור כמה איברים זהים יש ברשימה (count) ועוד.
נתבונן בתוכנית המורכבת הבאה ונראה מה היא מבצעת –
lista=[1,2,3,4]
lista.remove(lista[1])
lista.pop()
lista.append (8)
lista.reverse()
print (lista)
>>>
[8, 3, 1]
בהתחלה הסרנו את האיבר מס' 1 שהוא הספרה 2 מהרשימה וקיבלנו 1,3,4]] . לאחר מכן הסרנו את האיבר האחרון ברשימה (הספרה 4) וקיבלנו [1,3] . לאחר מכן הוספנו את הספרה 8 לסוף הרשימה וקיבלנו [1,3,8] ולבסוף הפכנו את סדר הרשימה כדי לקבל את התוצאה הסופית אותה ביקשנו להדפיס על המסך.
השימוש בפקודה index לעומת שימוש בפקודה enumerate -
כאמור, כדי לדעת מיקום של איבר ברשימה אנו משתמשים בפקודה index כשהיא צמודה לשם הרשימה -
lista = ["a","b","c"]
print(lista.index("c"))
>>>
2
אנו מקבלים שהתוצאה היא 2, אבל, העדר הבנה עמוקה של המתודה index עלולה לגרום לתקלות בתכנית, משום שהפקודה index נותנת את המיקום הראשון ברשימה, בו מופיע מה שמחפשים. כך למשל בתוכנית הבאה -
lista = [1,0,1,0,1,2,1,0]
print(lista.index(1))
>>>
0
אנו מקבלים שהמיקום של הספרה 0 הוא -0. למרות שהיא מופיעה במקומות נוספים ולא רק בתחילת הרשימה.
אחד הפתרונות לחלק מהבעיות שצצות בהקשר הזה – הוא שימוש בפקודה enumerate המייצרת אובייקט המייצר לנו צמדים, את המיקום האמיתי ברשימה ואת התוכן של מה שנמצא באותו מיקום.
lista=[1,0,1,0,1,0]
for a,b in enumerate(lista): print(a,b)
>>>
0 1
1 0
2 1
3 0
4 1
5 0
את התוצרים של פקודת enumerate אנו מקבלים באמצעות לולאת for ואנו רואים שאנו מקבלים צמד, מצד שמאל את המיקום האמיתי ברשימה, ובצד ימין את התוכן הקיים באותו מיקום.