חיתוך ערכים מתוך רצפים באמצעות Slicers

בפייתון קיימים מספר טיפוסי נתונים של רצפים (Sequences) והשימוש בהם מאוד דומיננטי. אם אתם מגיעים משפות תכנות אחרות, רצפים מאוד מזכירים מערכים (Arrays). רצף הוא בעצם כל סדרה מסודרת של ערכים (Values). ההגדרה הזאת חשובה מפני שקיימות גם סדרות ערכים שאינן מסודרות ולכן הן לא נחשבות לרצף. גם על אלה וגם על אלה נדבר בהמשך אבל כרגע נתרכז במחרוזות – מחרוזות בפייתון הן למעשה רצפים של אותיות.

מה זה אומר סדרה מסודרת? ובכן, כשאנו יוצרים רצף, פייתון מייצרת אינדקס עבור הרצף הזה וכל ערך ברצף מקבל מיקום ייחודי שמיוצג ע"י מספר. המספרים מתחילים מ-0 ולא מ-1 ומגיעים גבוה ככל שנצטרך. אנו יכולים לגשת לערכים "המאונדקסים" ע"י שיטת סימון מיוחדת שנקראת Slicers. המינוח הזה מגיע מלשון "לחתוך" באנגלית והרעיון הוא שאנחנו יכולים להשתמש במיקומי הערכים באינדקס כדי "לחתוך" חלקים מהרצפים האלה ולעבוד רק איתם.

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

או שאני רוצה להציג את הערך השלישי

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

כמו שאתם יכולים לראות, רווחים נחשבים כתו לכל דבר וגם להם יש אינדקס משלהם. בנוסף, טווח הערכים לא יכיל את הערך במיקום השני שציינו, אלא רק את הערכים עד למיקום שלו.
לדוגמה, אם נציין [2:5] נקבל את הערכים במיקומים 2,3,4
ע"י ציון של מספר אחד ונקודתיים אחריו נוכל לגזור את המחרוזת החל מתו מסוים ועד סופה

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

אנחנו יכולים להשתמש במספרים שליליים כדי להתחיל לספור ערכים מהסוף. אי אפשר להתחיל מ-0 במקרה הזה (0 הוא הערך הראשון) ולכן 1- נותן לנו את הערך הראשון מהסוף.

2- יחזיר את הערך השני מהסוף, 3- יחזיר את הערך השלישי מהסוף וכן הלאה. כדי להבין איך זה הגיוני, נסו לחשוב על רצף כמחרוזת ערכים שממש כמו מחרוזת חרוזים מתחברת עם עצמה ויוצרת מעגל. ה-0 הוא נקודת ההתחלה – התו הראשון ברצף – ומשם אנחנו יכולים להתקדם קדימה (ימינה) או אחורה (שמאלה) על ציר הערכים.

גם טווח בין מספר חיובי למספר שלילי עובד בלי בעיה, לדוגמה, כל הערכים מאינדקס מספר 5 ועד 3 תווים לפני הסוף:

ואפילו טווח בין שני מספרים שליליים

הדבר היחיד שיש להקפיד עליו הוא שהמספר הראשון יהיה קטן מהשני (גם אם מדובר במספרים שליליים) אחרת הביטוי לא יחזיר שום ערך.
שימוש קצת פחות נפוץ ב-Slicers הוא דילוג על ערכים מסוימים בתוך הרצף. אפשר ליצור דילוג בעזרת כתיבת נקודתיים פעמיים ולאחר מכן ציון מרווח הדילוגים.

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

אז מתי צורת הכתיבה הזאת בכל זאת שימושית? אם נציין את המספר 1, [1::], נקבל את אותו הרצף בדיוק – הצגת הערך הראשון ואחריו כל ערך ראשון.
אבל אם נציין את המספר 1-, אז נקבל את אותו הדבר, רק מהסוף. והנה לכם הצורה הכי פשוטה להפוך רצף בפייתון