פייתון/פייתון גרסה 3/אינדקס
אינדקס מאפשר למתכנת לגשת אל תו בטיפוסים שונים. האינדקס היא פעולה חשובה כיוון שהיא עוזרת למשתמש להגדיר טווחים עבור פונקציות.
Slicing היא פעולה בה נגשים אל חלק מהאיברים.
הספירה של האינדקס
[עריכה]פיתון מתחילה לספור תווים, בניגוד לשיטה העשרונית החל מאפס וסופרת לאחור עד מינוס אחד (מינוס אפס הוא כמו אפס):
- האינדקס סופר תווים ריקים!
ניתן להשתמש באינדקס עבור רשימות :
שימוש באינדקס
[עריכה]בכדי להשתמש באינדקס נרשום את שם המשתנה או המחרוזת ואחריה סוגרים מרובעים עם מספר התו.
>>> 'word'[2]
'r'
>>>>>> 'name'[-2]
'm'
החיתוך יכול להחזיר את התווים הנמצאים בין תו אחד למשנהו וזאת באמצעות נקודתיים:
>>>'hello'[1:4]
'ell'
שמו לב! פיתון אינה מחזירה את האיבר במיקום הרביעי אך כן מדפיסה את האיבר במיקום הראשון.
האינדקס יכול לבצע קפיצות בין תווים:
>>> 'hello'[1:4:2]
'el'
>>> 'helloworld'[7:2:-2]
'rwl'
>>> 'helloworld'[7:2:-3]
'ro'
נשם לב שבמקרה בו הקפיצות מתבצעות לאחור, קודם כל נוצר טווח שהוא חיובי, אלא שערכו מהסוף להתחלה. כלומר עבור helloworld תחזיר לי את הטווח שבין המיקום השביעי לשני דהיינו כלומר llowor בקפיצות של מינוס שתים. לכן פייתון מדפיסה ראשית את האיבר הראשון מהסוף r ומתחילה לבצע קפיצות של מינוס שתים. מינוס אחד הראשון נותן לה o ומינוס שתיים w על מחזירה w. שוב מבצעת פייתון את הפעולה ומחזירה l.
ברגע שפיתון יוצאת מהטווח בקפיצות, היא תחזיר מחרוזת ריקה (לא שגיאה בכדי שתוכל להחזיר את יתר המחרוזות) כפי שמשתמע מהדוגמה השלישית.
קיצורים
[עריכה]לעצלנים, ניתן להשמיט את האינדקס הראשון והאחרון:
>>> 'hello'[:3]
'hel'
>>>'hello'[2:]
'llo'
#from the start to the end, jump=2
>>> 'helloworld'[::2]
'hlool'
נקודתיים לעומת אפס
[עריכה]נשם לב להבדל בין נקודתיים לשימוש באפס:
כאשר אנו מציינים נקודתיים בלבד בקיפצות של מינוס אחד, פייתון מייצרת טווח מהסוף ועד המיקום שתיים ולכן מחזירה את כל האותיות בטווח זה dlrowol.
>>> 'helloworld'[:2:-1]
'dlrowol'
לעומת זאת, כאשר אנו עושים לכאורה אותה פעולה, מבקשים מפיתון, הפעם באזכור המספר אפס, פיתון מחזירה רשימה או מחרוזת ריקה מפני שהיא קופצת מאפס מינוס צעד לאחור (לא מתקבלת שגיאה בכדי שבמקרים בהם נבצע טווח בו יש מספרים ונגיע לאיבר מחוץ לטווח תוחזר מחרוזת). נשם לב שפעולה זו מתרחשת באופן זה גם לקפיצות הגדולות ממינוס אחד בפעולת הנקודתיים:
>>> 'helloworld'[0:2:-1]
''
>>> 'helloworld'[:9:-2]
''
slice notation
[עריכה]לעיתים נרצה לקבל תת מחרוזת (subString) או רשימה של טקסט ולא רק תו. לשם כך נעזרים ב-slice notation ששימושו זהה לאינדקס ובמקום לקבל תו נקבל תת מחרוזת - מילה שנחשבת מחרוזת חדשה.
באמצעות האינדקס ניתן להפוך בקלות את התווים של מחרוזות:
>>> sen="hello word! how are you today?"
>>>sen[::-1]
'?yadot uoy era woh !drow olleh'
שמירה על טווח
[עריכה]הטווח של מילה הוא מאפס ועד סוף אורכה פחות אחד (שהרי הספירה מתחילה מאפס) :
בספירה לאחורה, הטווח של מילה הוא מהתו האחרון של המילה ועד מינוס אחד:
מאחר שמאוד קל לאבד את הספירה, תכנת debugger עוזרת לנו לדעת היכן הטעויות שבצענו בעת התכנות.
כאשר נחרוג מהטווח של תווי המחרוזת נקבל שגיאה:
>>> name[-5]
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module>
name[-5]
'''IndexError: string index out of range'''
המדריך לנבחן
[עריכה]קוד | טקסט הכותרת | טקסט הכותרת |
---|---|---|
טקסט התא | הדפסה מהסוף להתחלה | >>> a= 'Alice1In2'
print(a[::-1])
>>>2nI1ecilA
|
טקסט התא | מדפיס מהסוף להתחלה בדילוגים של שתים כאשר הספירה מתחילה כבר מהאיבר הראשון (כלומר מדפיס את האיבר האחרון) ואת האיבר במיקום השני | >>> a= 'Alice1In2'
print(a[::-2])
>>>2IeiA
|
הבחנה בין חיתוך לאינדקס | באינדקס לא ניתן לגשת אלא איבר שאינו קיים לעומת זאת בחיתוך נקבל מחרוזת ריקה | a= 'Alice1In2'
print(a[-11])
>>>IndexError: string index out of range
print(a[1:1:-1])
>>>
print(a[1:1])
>>>
|
טקסט התא | מדפיס את האיבר הראשון בקפיצה |
a= 'Alice1In2'
print(a[::11])
>>>A
print(a[::-11])
>>>2
|
טקסט התא | טקסט התא | טקסט התא |
טקסט התא | הדפס מהמיקום הראשון עד האיבר במיקום המינוס אחד |
a= 'Alice1In2'
print(a[1:-1])
>>>lice1In
|
טקסט התא | הדפס לאחור מהאיבר במיקום האחד (l) עד האיבר האחרון כאשר הכיוון הפוך |
a= 'Alice1In2'
print(a[1::-1])
>>>lA
print(a[1::-2])
>>>l
|
טקסט התא | הדפס הפוך: מהתחלה עד האיבר במיקום האחד | a= 'Alice1In2'
print(a[:1:-1])
>>>2nI1eci
print(a[:1:-2])
>>>2Iei
|
ראה גם
[עריכה]פונקציות count(), פונקציות find(), פונקציות rfind() פונקציות index(), פונקצית rindex