Contents
כיצד פועלת פעולת פריסה (slicing) עבור רצפים (למשל, רשימות או מחרוזות) בפייתון, ומה יקרה אם יצוינו אינדקסים החורגים מגבולות הרצף?
- A. פריסות יוצרות עותק של חלק מהרצף. אם האינדקסים חורגים מגבולות, תמיד תתקבל שגיאת
IndexError
. - B. פריסות יוצרות עותק שטחי של חלק מהרצף, המוגדר על ידי אינדקס התחלה, אינדקס סוף (לא כולל) ואינדקס צעד. אם אינדקסים של פריסה חורגים מגבולות, פייתון מטפלת בכך כראוי, ומחזירה את החלק הזמין או רצף ריק — מבלי לגרום לשגיאה.
- C. פריסות משנות את הרצף המקורי, ומסירות אלמנטים שמחוץ לטווח המצוין. תתרחש שגיאת
IndexError
אם אינדקס ההתחלה גדול מאינדקס הסוף. - D. פריסות ניתנות ליישום רק על מחרוזות, אך לא על רשימות. הן תמיד מחזירות אלמנט אחד בלבד, התואם את אינדקס ההתחלה.
תשיבה 👇
תשובה נכונה: Bתשובה נכונה: B
🧠 הסבר:
תחביר:
תחביר הפריסה הכללי בפייתון הוא:
sequence[start:stop:step]
start
– אינדקס התחלה (כלול), ברירת מחדל: 0.stop
– אינדקס סוף (לא כלול), ברירת מחדל: סוף הרצף.step
– הצעד (כמה להתקדם בין פריט לפריט), ברירת מחדל: 1.
ניתן גם להשתמש באינדקסים שליליים, שמתחילים מהסוף של הרצף (-1
הוא האלמנט האחרון).
התנהגות בעת חריגה מגבולות:
אם מציינים אינדקסים מחוץ לטווח התקין של הרצף (למשל my_list[5:1000]
כאשר לרשימה יש רק 10 פריטים), לא מתקבלת שגיאה:
- פייתון תחזיר את החלק הזמין של הרצף.
- אם הטווח אינו כולל אף פריט, יוחזר רצף ריק.
- לא מתקבלת שגיאת
IndexError
כמו בגישה ישירה לפריט בודד (my_list[999]
כן יגרום לשגיאה).
עותק שטחי:
בכל שימוש בפריסה מתקבל עותק חדש של חלק מהרצף. זהו עותק שטחי:
- האלמנטים עצמם הם אותם אובייקטים (אם הם ברי שינוי — שינוי ישפיע על שניהם).
- אך הרשימה/המחרוזת החדשה עצמה היא ישות נפרדת בזיכרון.
🧪 דוגמה:
my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
my_string = "abcdefghij"
print(my_list[2:5]) # פלט: [2, 3, 4]
print(my_string[:3]) # פלט: 'abc'
print(my_list[5:]) # פלט: [5, 6, 7, 8, 9]
print(my_string[::2]) # פלט: 'acegi'
# אינדקסים חורגים מגבולות:
print(my_list[5:100]) # פלט: [5, 6, 7, 8, 9]
print(my_string[-100:3]) # פלט: 'abc'
print(my_list[100:200]) # פלט: []
💡 טיפ שימושי לפריסה בפייתון:
ניתן להפוך רצף בעזרת [::-1]
:
print("hello"[::-1]) # פלט: 'olleh'
🧩 טבלת דוגמה: פריסה של רשימה
ביטוי פריסה | משמעות | פלט |
---|---|---|
my_list[2:5] | מפריט 2 עד פריט 5 (לא כולל) | [2, 3, 4] |
my_list[:3] | מהתחלה עד פריט 3 (לא כולל) | [0, 1, 2] |
my_list[::2] | כל פריט שני | [0, 2, 4, 6, 8] |
my_list[::-1] | כל הפריטים מהסוף להתחלה | [9, 8, ..., 0] |
my_list[100:] | מתחיל אחרי הסוף | [] |
🎯 טיפ לסיום:
אם אינך בטוח באורך הרשימה או המחרוזת, תן לפייתון לדאוג לגבולות — הפריסה תמיד תחזיר תוצאה בטוחה ולא תזרוק שגיאה.
לסיכום:
פריסה (slicing) בפייתון היא כלי עוצמתי לקבלת תתי־רצפים, והיא מתבצעת בצורה בטוחה ואינטואיטיבית. שימוש נכון בפריסה מאפשר לכתוב קוד נקי, תמציתי וחזק — ללא צורך בבדיקות גבולות מיותרות.
ולכן — תשובה B היא הנכונה. ✅