רשימות מקוננות (nested lists)#

מבוא לרשימות מקוננות, או בשם אחר - “בעית ניו-זילנד 2”#

להלן רשימת הוצאות שבועיות לפי קטגוריה

קטגוריה

שבוע 8

שבוע 7

שבוע 6

שבוע 5

שבוע 4

שבוע 3

שבוע 2

שבוע 1

אוכל

664

169

89

252

659

353

272

80

לינה

18

232

33

52

421

0

292

335

תחבורה

30

18

32

226

181

1

115

605

מתנות

3

131

446

20

39

0

221

180

וכרשימה מקוננת:

table = [
    [80, 272, 353, 659, 252, 89, 169, 664],         # אוכל
    [335, 292, 0, 421, 52, 33, 232, 18],            # לינה
    [605, 115, 1, 181, 226, 32, 18, 30],            # תחבורה
    [180, 221, 0, 39, 20, 446, 131, 3]              # מתנות
]

רשימות מקוננות הן רשימות שמכילות בתוכן רשימות נוספות.

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

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

אינדקסים של רשימות מקוננות#

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

lst = [[4,5,3], [-77, "abc"]]
# print(len(lst))
# print(lst[0])
# print(lst[1])
# print(lst[0][0])
# print(lst[0][2])
inner_lst = lst[0]
# print(inner_lst[2])
# print(lst[0][2][0])
print(lst[1][1][0])
a

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

דוגמא: עבור הרשימה [[3] ,[1,2]] = L.
הפקודה [0][1]L ניגשת תחילה לאיבר באינדקס 1 של L, כלומר, הרשימה [3]. לאחר מכן לאיבר באינדקס 0 של רשימה זו, כלומר, המספר 3.

בחנו את עצמכם

להלן רשימת ההוצאות השבועיות שראינו קודם

קטגוריה

שבוע 8

שבוע 7

שבוע 6

שבוע 5

שבוע 4

שבוע 3

שבוע 2

שבוע 1

אוכל

664

169

89

252

659

353

272

80

לינה

18

232

33

52

421

0

292

335

תחבורה

30

18

32

226

181

1

115

605

מתנות

3

131

446

20

39

0

221

180

וכרשימה מקוננת:

table = [
    [80, 272, 353, 659, 252, 89, 169, 664],         # אוכל
    [335, 292, 0, 421, 52, 33, 232, 18],            # לינה
    [605, 115, 1, 181, 226, 32, 18, 30],            # תחבורה
    [180, 221, 0, 39, 20, 446, 131, 3]              # מתנות
]

להלן הרשימה הבאה: L = [1, [2], [“a”, “list”] ]

פעולות על רשימות מקוננות#

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

table = [[4, 7, 8, 9],
         [6, 0, -3, 1],
         [12, 3, 4, 2]]

# print(len(table[1]))
# print(sum(table[0]))
s0 = sum(table[0])
s1 = sum(table[1])
s2 = sum(table[2])
# print(s0 + s1 + s2)
sums_lst = [s0, s1, s2]
print(sum(sums_lst))
53

בחנו את עצמכם

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

 T = [ 
 [1, 2, 3], 
 [4, 5, 6], 
 [7, 8, 9] 
 ] 
 
 i=0 
 j=1

שימו לב - הרשימה T היא רשימה מקוננת.

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

דוגמאות:

  1. הפקודה len(T) מחזירה 3 - שכן הרשימה T מחזיקה בתוכה 3 רשימות (מקוננות).

  2. הפקודה T[0][3] מביאה לשגיאה, שכן לרשימה שנמצאת באינדקס 0 (ביחס ל-T) יש 3 איברים, ולכן לא ניתן לגשת ברשימה (מקוננת) זו לאיבר באינדקס 3.

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

על מנת להציג את הערך המוחזר של פקודה מסוימת, “עטפו” אותה בפקודת print. למשל: print(len(T))

T = [
	[1, 2, 3],
	[4, 5, 6],
	[7, 8, 9]
	]

i = 0
j = 1
# check your answers here:

בחנו את עצמכם#

  1. בחלונית הקוד למטה מופיע המשתנה table. משתנה זה הוא טבלת מספרים (רשימה של רשימות). בטבלה 3 שורות (רשימות), ובכל שורה 5 איברים.
    עליכם לממש את הפונקציה table_statistics אשר מקבלת את המשתנה table, ומחזירה את המשתנים table_sum, table_min, table_max, sorted_table לפי הערכים הבאים.
    המשתנה table_sum יחזיק את סכום המספרים בטבלה.
    המשתנה table_min יחזיק את ערכו של האיבר המינימלי בטבלה.
    המשתנה table_max יחזיק את ערכו של האיבר המקסימלי בטבלה.
    המשתנה sorted_table יחזיק רשימה (לא מקוננת) ובה כל המספרים שבטבלה ממוינים מהקטן לגדול.
    הנחיות: היעזרו בפונקציות המובנות של פייתון - sum, min, max, sorted. היעזרו בסרטון שזה עתה ראיתם - למעשה, פתרנו בו חלק מהתרגיל.

def table_statistics(table):
    # Write your code here

    return table_sum, table_min, table_max, sorted_table

לאחר שפתרתם את התרגיל - הריצו את הקוד וצפו בתוצאות הפלט - תקנו את הקוד במידת הצורך.

table = [ [6, 9, -18, 12, 21], 
          [5, 20, 0, 4, 16], 
          [-6, 5, -12, -6, -13]]

table_sum, table_min, table_max, sorted_table = table_statistics(table)

print("table_sum: ", table_sum, "\ntable_min: ", table_min, "\ntable_max: ", table_max, "\nsorted_table: ", sorted_table)
  1. כעת אתם מוכנים לעזור לבני לקצץ בהוצאות!
    להלן רשימת ההוצאות השבועיות שראינו קודם:

קטגוריה

שבוע 8

שבוע 7

שבוע 6

שבוע 5

שבוע 4

שבוע 3

שבוע 2

שבוע 1

אוכל

664

169

89

252

659

353

272

80

לינה

18

232

33

52

421

0

292

335

תחבורה

30

18

32

226

181

1

115

605

מתנות

3

131

446

20

39

0

221

180

וכרשימה מקוננת:

table = [
    [80, 272, 353, 659, 252, 89, 169, 664],         # אוכל
    [335, 292, 0, 421, 52, 33, 232, 18],            # לינה
    [605, 115, 1, 181, 226, 32, 18, 30],            # תחבורה
    [180, 221, 0, 39, 20, 446, 131, 3]              # מתנות
]

ממשו פונקציה בשם most_expensive(table) אשר מקבלת רשימה מקוננת באורך 4 (לפי הסדר - אוכל, לינה, תחבורה ומתנות). הפונקציה בודקת את הסכום של כל אחת מהקטגוריות, לאורך השבועות.

אם ההוצאה היקרה ביותר היא אוכל, הפונקציה תחזיר את המחרוזת "food".
אם ההוצאה היקרה ביותר היא לינה, הפונקציה תחזיר את המחרוזת "stay".
אם ההוצאה היקרה ביותר היא תחבורה, הפונקציה תחזיר את המחרוזת "transport".
אם ההוצאה היקרה ביותר היא מתנות, הפונקציה תחזיר את המחרוזת "gifts".

# Write your code here
table = [
    [80, 272, 353, 659, 252, 89, 169, 664],         # אוכל
    [335, 292, 0, 421, 52, 33, 232, 18],            # לינה
    [605, 115, 1, 181, 226, 32, 18, 30],            # תחבורה
    [180, 221, 0, 39, 20, 446, 131, 3]              # מתנות
]

print(most_expensive(table))