פייתון/פייתון גרסה 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 ניתן להכניס פקודת בין הלולאות וללחוץ על בכדי לעלות את שורת ההדפסה לכל פקודה בלולאה ולבדוק האם מתבצעת הפעולה.
ראה גם
עריכה- /תרגילים
- ניתן להשתמש ב-else, elif בלולאת for