פייתון/רשימות

מתוך ויקיספר, אוסף ספרי הלימוד והמדריכים החופשי.

קפיצה אל: ניווט, חיפוש



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


{{{גודל}}}

כדאי לדעת:

רשימה בפייתון מקבילה (אך לא זהה) למערך ברוב השפות הנפוצות האחרות, לדוגמה מערך שפת C.



תוכן עניינים

[עריכה] הגדרת רשימה

רשימה בפייתון היא עצם מהצורה:

[<elements>]

כאשר elements היא איבר או יותר מופרדים על ידי פסיקים. לדוגמה,

[1, 2, 3]

היא רשימה של מספרים שלמים, ולעומת זאת

['Hello', 'world']

היא רשימה של מחרוזות. בניגוד לשפות רבות אחרות, רשימה לא חייבת להיות הומוגנית. הנה רשימה שחלק מאיבריה מספרים, וחלקם מחרוזות:

['Hello', 1, 2.2, 'world']

[עריכה] פונקציות פנימיות

  • a_list.reverse() - הופך את סדר הרשימה.
  • a_list.sort() - ממיין את הרשימה.

[עריכה] פונקציות חיצוניות

  • str.split(<delimiter>) - מפצל מחרוזת לרשימה בהתאם ל-delimiter. ברירת המחדל היא רווח.
  • sorted_list=sorted(original_list) - מחזיר רשימה ממוינת ללא שינוי הרשימה המקורית.

[עריכה] רשימות, עצמים, ושמות

היות שרשימה היא עצם, אז אפשר לקשור לה שם. כך, לדוגמה:

>>> my_list = ['Hello', 1, 2.2, 'world']

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

>>> a = 2
>>> b = 3
>>> [a, b, 'hello', 5]
[2, 3, 'hello', 5]

[עריכה] מציאת אורך

כדי למצוא אורך רשימה, רושמים

len(<lst>)

כאשר lst היא רשימה. התוצאה היא עצם מסוג מספר שלם. כך, לדוגמה:

>>> len([2, 3])
2
>>> a = [1, 2, 3]
>>> len(a)
3
>>> len(a) + 2 * 3
9

[עריכה] גישה לאיבר

כדי לגשת לאיבר, רושמים:

<lst>[<pos>]

כאשר lst היא רשימה, ו-pos הוא המיקום בתוך הרשימה.


Achtung.svg

שימו לב:

האיבר הראשון ברשימה הוא 0, ולא 1.




תחביר משמעות
a[0] האיבר הראשון.
a[-1] האיבר האחרון.
a[-2] האיבר לפני האחרון.
a[0:2] or a[:2] שני האיברים הראשונים.
a[-2:] שני האיברים האחרונים.
a[:-1] כל האיברים פרט לאחרון.
a[1:] כל האיברים פרט לראשון.

לדוגמה:

>>> a = [2, 3, 4]
>>> a[0]
2
>>> a[1]
3

המתרגם מזהה מצב בו גולשים מגבולות הרשימה:

>>> a = [2, 3]
>>> a[5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

[עריכה] שינוי איבר

אפשר לשנות איבר רשימה, כפי שמראה הדוגמה הבאה:

>>> a = [2, 3, 4]
>>> a
[2, 3, 4]
>>> a[0] = 10
>>> a
[10, 3, 4]

גם כאן, אי אפשר לשנות איבר שמיקומו גולש מהרשימה:

>>> a = [2, 3]
>>> a[5] = 8
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range

[עריכה] הוספת איבר

כדי להוסיף איבר לסוף הרשימה, רושמים:

<lst>.append(<obj>)

או:

<lst>[-1:]=[<lst>[-1],<obj>]

וכדי להוסיף איבר לתחילת הרשימה:

<lst>[:0]=[<obj>]

כאשר lst היא רשימה, ו-obj הוא העצם להוסיף לסופה. כך, לדוגמה:

>>> a = [2, 4, 6]
>>> a.append(8)
>>> a
[2, 4, 6, 8]
>>> a[:0]=[-2,0]
>>> a
[-2, 0, 2, 4, 6, 8]
>>> a[3:]=[1]
>>> a
[-2, 0, 2, 1]
>>> a[-1:]=[4,6,8]
>>> a
[-2, 0, 2, 4, 6, 8]

[עריכה] מציאת אינדקס של איבר

>>> phrase=['three','differenrt','words']
>>> phrase.index('words')
2
>>> phrase.index('three')
0

[עריכה] בדיקת שייכות

ניתן לבדוק שייכות לרשימה באמצעות האופרטור in:

>>> shopping=['milk','bread']
>>> 'juice' in shopping
False
>>> for product in shopping:   # זאת לולאה, הנלמדת בפרק מתקדם יותר.
...     print product
...
milk
bread

[עריכה] מחיקת איבר

מוחקים איבר ברשימה בצורה:

del <lst>[<index>]

כאשר lst היא רשימה, ו-index הוא אינדקס האיבר למחיקה. לדוגמה:

>>> a = [2, 3, 4]
>>> a
[2, 3, 4]
>>> del a[1]
>>> a
[2, 4]

גם כאן, אי אפשר למחוק איבר שמיקומו גולש מהרשימה:

>>> del a[10]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range

[עריכה] שרשור רשימות

משרשרים רשימות בצורה:

<lst>.extend(<other_lst>)

כאשר lst היא רשימה, וother_lst היא רשימה אחרת. הפעולה תשרשר את איברי other_lst לסוף lst, ולא תשנה את other_lst. לדוגמה:

>>> a = [2, 3, 4]
>>> b = [1, 5]
>>> a.extend(b)
>>> a
[2, 3, 4, 1, 5]
>>> b
[1, 5]

[עריכה] הרשימה range

פרק זה לוקה בחסר. אתם מוזמנים לתרום לוויקיספר ולהשלים אותו. ראו פירוט בדף השיחה.

[עריכה] בניית רשימות ע"י אפיון

Edit-undo.svg

שקול לדלג על נושא זה

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




לעתים מאפיינים במתמטיקה קבוצה כ\left\{f(x) \;:\; P(x)\right\}. הכוונה היא שהקבוצה מכילה, לכל x שעבורו מתקיים P(x), את f(x). לדוגמה:

  • הקבוצה \left\{x \;:\; x  \in \left\{1, \ldots, 10\right\} \right\} היא קבוצת כל האיברים x כך ש-x שייכת לקבוצה \left\{x \;:\; x  \in \left\{1, \ldots, 10\right\} \right\}. בצורה אחרת, זוהי פשוט הקבוצה \left\{1, 2, 3, 4, 5, 6, 7, 8, 9, 10\right\}.
  • הקבוצה \left\{x^2 \;:\; x  \in \left\{1, \ldots, 10\right\} \right\} היא קבוצת כל האיברים x2 כך ש-x שייכת לקבוצה \left\{x \;:\; x  \in \left\{1, \ldots, 10\right\} \right\}. בצורה אחרת, זוהי פשוט הקבוצה \left\{1, 4, 9, 16, 25, 36, 49, 64, 81, 100\right\}.
  • הקבוצה \left\{x \;:\; x  \in \left\{1, \ldots, 10\right\} \wedge x \;%\; 2 = 0\right\} היא קבוצת כל האיברים x כך ש-x שייכת לקבוצה \left\{x \;:\; x  \in \left\{1, \ldots, 10\right\} \right\}, ו-x זוגי. במילים אחרות, זוהי פשוט הקבוצה \left\{2,  4, 6, 8, 10\right\}.


Thumbs up.png

עכשיו תורך:

מהם איברי הקבוצה \left\{x^2 \;:\; x  \in \left\{1, \ldots, 10\right\} \wedge x \;%\; 2 = 0\right\}?





פייתון מאפשרת לבנות רשימות ע"י אפיון כזה, בצורה:

[<expression> for <var> in <lst>]

או:

[<expression> for <var> in <lst> if <condition>]

כאשר var הוא ביטוי, lst היא רשימה, condition הוא ביטוי בוליאני (שיכול להיות תלוי ב-var), ו-expression הוא ביטוי (שיכול להיות תלוי ב-var).

לדוגמה:

[x for x in range(10)]

שקולה לחלוטין ל:

range(10)

אם נרצה רק את האיברים הזוגיים, נוכל לכתוב כך:

[x for x in range(10) if x % 2 == 0]

הנה מצב בו expression מעט מורכב יותר:

[x**2 for x in range(10)]

expression גם יכול להיות מורכב מפונקציה:

def divides_by_three(n):
	return n % 3 == 0
 
[x**2 for x in range(10) if divides_by_three(x)]

או בצורה כללית (נניח שהפונקציה f והרשימה a_list הוגדרו כבר):

y=[f(x) for x in a_list]

ניתן לבצע "מיפוי" שכזה גם בעזרת פונקצית map:

map(f,a_list)

לדוגמה:

>>> import math
>>> map(math.sqrt,[4,9,16])
[2.0, 3.0, 4.0]

דוגמאות נוספות:

>>> a_list=[(x,x**2) for x in range(5)]
>>> a_list
[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16)]
>>> for (x,y) in a_list:
...     print x,y
...
0 0
1 1
2 4
3 9
4 16
>>> [[x,y] for x in range(3) for y in range(7,10)]
[[0, 7], [0, 8], [0, 9], [1, 7], [1, 8], [1, 9], [2, 7], [2, 8], [2, 9]]


הפרק הקודם:
קלט ופלט
רשימות הפרק הבא:
ביטויים בוליאניים ותנאים