פייתון/פייתון גרסה 3/לולאת for: הבדלים בין גרסאות בדף
imported>יהונתן ה מ תוכן עניינים |
(אין הבדלים)
|
גרסה אחרונה מ־18:06, 29 במרץ 2020
לולאת 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 לוקחת את הפריט הראשון של הרשימה ומוסיפה לו את הפעולה.
פעולות על פריטים ברשימה
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 בשלבים כאשר נבדוק בכל שלב שהפריט נכנס אל תוך התנאי המקונן.
אחת הטעויות הנפוצות היא הכנסת פקודת ההדפס אל תוך הלולאה כך שהפתרון המתקבל בכל פעם בלולאה מודפס מספר פעמים במקום פעם אחת.
לולאת 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