פייתון/פייתון גרסה 3/לולאת for

לולאת for

עריכה

לולאת for היא פעולה שמבצעת פיתון עבור ביטוי מרשימה שוב ושוב עד שמגיעה לפקודה שעוצרת אותה.

for <name> in <lst>:
    <action>
  • name הוא ערך הפריט לפי סדרו ברשימה.
  • lst היא רשימה
  • action הפעולה שתבוצע.

הלולאה פותחת שורה חדשה בה היא לוקחת את הפריט הראשון מהרשימה (הname) בתוספת הפעולה שהגדרנו עד שמסיימת לעבור על כל הרשימה:

L=[1,'a','b',2,'d',4,'e']
new=[]
new_2=[]

for i in L:
    print(i)

1
a
b
2
d
4
e

פעולת ה-for העוברת על כל פריט ופריט ברשימה נקראת אנטרציה (Iteration).

דוגמה

עריכה
for day in ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']:
    print '‎Today is ' + day

הלולאה for לוקחת את הפריט הראשון של הרשימה ומוסיפה לו את הפעולה.


פתרון
Today is Sunday
Today is Monday
Today is Tuesday
Today is Wednesday
Today is Thursday
Today is Friday
Today is Saturday


פעולות על פריטים ברשימה

עריכה
str_L=['1','2','3']
int_L=[]

# convent str in str_L to int
for i in str_L :
    int_L.append(int(i))

print(int_L)

#what type of the items in the list?
for i in int_L:
    print(type(i))

[1, 2, 3]
<class 'int'>
<class 'int'>
<class 'int'>

האם הפקודה פועלת?

עריכה

שימוש בלולאת for יחד עם תנאים בייחוד מקוננים אחד בשני עלול ליצור באגים רבים. לפיכך מומלץ לבדוק בכל פעם שמיצרים לולאה האם הפריט שלנו נכנס אליה.

דוגמה: בנו לולאה אשר תדפיס את כל המספרים הגדולים מ-7 מתוך רשימה  .

מומלץ לבנות את לולאת for בשלבים כאשר נבדוק בכל שלב שהפריט נכנס אל תוך התנאי המקונן.


פתרון

במקרה שלנו קודם כל נבדוק האם מצליחה הלולאה לבדוק אילו מהמספרים הם מספרים.

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

for i in L:
    if type(i)==int:
        print(i)

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

L=['a', 'b', '1',6, '2',4, 'd', 'r', '3', 2, 9, 10]

# convent str in str_L to int
for i in L:
    if type(i)==int:
        if i > 7:
            print (i)

9
10


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

לולאת for ו-range

עריכה

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

נפתח את קובץ האצווה וניצור קובץ חדש.

פניה אל מיקום האינדקס ברשימה

עריכה

איטרציה על רשימה שאיבריה מיצגים את אורכה של רשימה אחרת

עריכה
L=[4,3,36,434,55]

for i in range(len(L)):
    print (i)
0
1
2
3
4

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

פניה אל ערך ברשימה

עריכה
L=[4,3,36,434,55]

print('L')
for i in L:
    print (i)
L
4
3
36
434
55

או לחילופין,

for a in range(5,10):
    print(a)

5
6
7
8
9

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

פניה אל האיבר במיקום ה-i

עריכה

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

L=[5,2,3]

for i in range(len(L)):
    print(i)
    L[i]=L[i]+1
print("the list:",L)

>>>
0
1
2
the list: [6, 3, 4]

האינדקס במיקום האפס הוא 5. נוסיף אליו אחד ונקבל 6.

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

L=[5,2,3]

for i in L:
    print('the vaule of i:', i)
    i = i+1
    print('the vaule of i after Iteration: ',i)
print("the list:",L)
>>>
the vaule of i: 5
the vaule of i after Iteration:  6
the vaule of i: 2
the vaule of i after Iteration:  3
the vaule of i: 3
the vaule of i after Iteration:  4
the list: [5, 2, 3]

הרשימה שלנו במקרה זה אינה משתנה מאחר שלא פנינו אל ערך ברשימה על ידי פקודה  . במקום השמנו את המשתנה i ושנינו את ערכו בכל איטרציה.

דוגמה נוספת
עריכה
L=[1,'a','b',2,'d',4,'e']
new=[]
new_2=[]

for i in L:
    if type(i)== int:
        new.append(i)
        new_2.append(L[i])
        
print(new)
print(new_2)

[1, 2, 4]
['a', 'b', 'd']

ברשימה זו יצרנו שתי רשימות. הרשימה הראשונה היא רשימת כל המספרים הנמצאים ברשימת L. לאחר מכן, אנו אומרים ללואת for אם הערך הוא אכן מספר, שלוף לנו את האיבר במיקום של ערכו של ה-i.

  • האיבר במיקום ה-1 הוא a (זכרו שפיתון מתחילה לספור מאפס)
  • האיבר במיקום ה-2 הוא b
  • האיבר במיקום ה-4 הוא d

לסיכום: נפנה בפקודה   אל הערך במיקום ה- , ואילו כאשר אנו מבקשים   ב- , אנו פונים אל טווח של הרשימה, דהינו אל האיבר במקום  , מאפס עד ארבע.

  במקרה זו הוא ערך ברשימה L.

פעולות על הפריט ברשימה

עריכה

ניתן להפעיל על פריט ברשימה פונקציות כאשר הם בתוך תנאי מקונן ברשימת for:

for i in L:
    if type(i)== int:
        new.append(i)
        
<source lang = "python">

print(new)

סביבות אינטראקטיבית

עריכה
  • בסביבות אינטראקטיביות כמו mycharm ניתן להכניס פקודת   בין הלולאות וללחוץ על   בכדי לעלות את שורת ההדפסה לכל פקודה בלולאה ולבדוק האם מתבצעת הפעולה.

ראה גם

עריכה