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

סוגי נתונים

בפייתון יש לנו חמישה סוגי נתונים:

  • str - מחרוזת (String) מייצגת נתוני טקסט ולמעשה רצפים של תווים (הכוללים אותיות, מספרים ותווים מיוחדים). באופן כללי המחרוזת היא הבסיס לאחסון ועבודה עם מידע טקסטואלי.
  • int - מספרים שלמים (Integers) כמו 1, -5 או 0. אין להם נקודות עשרוניות. מה שמיוחד במספרים שלמים בפייתון הוא הגודל שלהם. בניגוד לשפות תכנות אחרות, int בפייתון אינו מוגבל לגודל המספר השלם, כל עוד הזיכרון במחשב מאפשר זאת.
  • float - מספרים עשרוניים (Float) אלו מספרים עם נקודה עשרונית, המאפשרים לאחסן ולעבוד עם ערכים כמו 3.14159 (פיי), 10.5.
  • bool - מערך בוליאני (Booleans) - בפייתון, לעתים קרובות עלינו לענות על שאלות כן או לא. כאן נכנסים לתמונה הערכים הבוליאניים. הם פועלים כמו מקבלי החלטות זעירים, ומאחסנים את הערכים True (אמת) או False (שקר) בהתאם לתנאים שנציב.
  • NoneType - ריק (None) הוא סוג נתונים מיוחד המייצג היעדר ערך. זה בעצם דרך לומר שמשתנה אינו מכיל נתונים כלל או שאין לו ערך מוקצה עדיין. לצורך העניין, אפשר לחשוב עליו כמו מיכל ריק.

רשימות

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

x = [9586.64 , 10448.0, 15671.99]
print(type(x))
print(type(x[0]))
print(x)

הפלט יראה כך:

<class 'list'>
<class 'float'>
[9586.64, 10448.0, 15671.99]

למעשה פייתון ידעה לומר לנו שמערך הנתונים הוא מסוג רשימה. ושהאיבר הראשון במערך הוא מסוג float - מספר עשרוני.

תכונות

  1. רשימות מאפשרות לך לקרוא לקבוצת ערכים בשם.
  2. רשימה יכולה להכיל כל סוג נתונים.
  3. רשימה יכולה להכיל תתי-רשימות: [1, [1,2,3], ["a","b","c"], "Z"]
  4. ערך יכול להכיל חישובים או קבוצות מספרים, לדוגמה: list = ["a" * 5, 2] ידפיס את הרשימה הבאה ['aaaaa', 2]
  5. רשימות בפייתון ניתנות לאיטרציה, כלומר ניתן להשתמש בלולאות כמו while ו-for כדי לגשת ולעבד ביעילות כל פריט ברשימה. לדוגמה: נבנה רשימה שמכילה את כל המספרים האי-זוגיים בין 0 ל-100:
    odd = [n for n%2!=0 in range (0, 101)] ידפיס [1,3,5,7,9, וכן הלאה]

שליפת איברים

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

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

new_list = ['Dolev', 33, 'Michal', 27, 'Orr', 7, "Be'eri - Nathan", 0.6] # This is our raw list
print(new_list[0]) # מבקש מפייתון להדפיס את האיבר הראשון 
print(new_list[-1]) #מבקש מפייתון להדפיס את האיבר האחרון (או הראשון מהסוף)

הפלט יראה כך:

Dolev
0.6

חיתוך רשימות

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

חיתוך בסיסי

לצורך הדגמה נייצר רשימה שמכילה שמות של פירות:

fruits = ["apple", "banana", "cherry", "mango", "orange"]

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

  • ללא ארגומנטים: fruits[:] - משכפל את כל הרשימה. מעתיק את כל פריטי המידע (אלמנטים) מההתחלה (אינדקס 0) ועד הסוף.
  • ציון אינדקס התחלתי:  fruits[1:] - יוצר רשימה שמתחילה מהאינדקס שרשמנו (אינדקס 1 שהוא האיבר השני, “banana”) ועד לסוף הרשימה הקיימת.
  • ציון אינדקס סופי: fruits[:3] - מייצר רשימה מהתחלה (אינדקס 0) ועד, אך לא כולל, האינדקס הסופי המצוין (אינדקס 3 במקרה זה, שהוא “mango”) ז"א שהרשימה תיעצר באיבר Cherry.

כמה עקרונות:

  1. חיתוך תמיד יוצר רשימה חדשה, ולא משנה את הרשימה המקורית.
  2. האינדקס הסופי הוא לא כלול, כלומר האלמנט באינדקס הזה אינו כלול ברשימה החתוכה.
  3. ניתן להשמיט את האינדקס ההתחלתי או הסופי. להבדיל ממטודות אחרות בפייתון, בעבודה עם רשימות אנחנו לא חייבים לאתחל את כל הפרמטרים האפשריים.

חיתוך מתקדם

חיתוך מציע גמישות רבה ומאפשר לנו לציין את ערך הקפיצה:

fruits[1::2] 

הפלט יהיה “banana” ו-“orange” מכיוון שערך הקפיצה הוא 2.
כלומר הוא לוקח כל אלמנט שני מהאינדקס ההתחלתי (אינדקס 1, שהוא האיבר השני ברשימה) ואילך.

אינדקסים שליליים: ניתן להשתמש גם באינדקסים שליליים לחיתוך כדי להתחיל מהסוף של הרשימה:

fruits[-2:] 

הפלט יהיה “mango” ו-“orange” .

כמה מילות סיכום

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

הקרדיט לתמונה שייך ל-RDNE Stock project