ווטסאפ - לינוקס, BSD, קוד פתוח ותוכנה חופשית בעברית. Whatsup - Linux, BSD, open source and free software in Hebrew

 
 
  כניסת חברים · רישום · שכחתי סיסמה  
tux the penguin
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
COM64לא בפורום כעת ת.הצטרפות: 09/07/2003 · הודעות: 1608 · מיקום: ראשל"צ
 

הודעה פורסם: 23/01/2021 - 11:46
נושא ההודעה: התנהגות לא ברורה (לי) של print בפייתון

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

קוד:
counter_1 = []
for i in range(15):
    counter_1.append(i)

#print(list(counter_1))
enumerate_counter = enumerate(counter_1)
print(list(enumerate_counter))
for i,j in list(enumerate_counter):
    print(i,j)


ואותו קטע כששורת ה-print ללא הערה:
קוד:
counter_1 = []
for i in range(15):
    counter_1.append(i)

print(list(counter_1))
enumerate_counter = enumerate(counter_1)
print(list(enumerate_counter))
for i,j in list(enumerate_counter):
    print(i,j)


אני מנסה להבין מדוע הקטע הראשון מדפיס באופן הגינוי את מה שנמצא בלולאת ה-for ולעומת זאת הקטע השני מדפיס רק את ה-print הראשון ומתעלם מזה שנמצא בתוך לולאת ה-for והודפס קודםץ

מה אני מפספס כאן?

תודה !

_________________
איזי גולדנברג
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
משה-נחמיאסלא בפורום כעת ת.הצטרפות: 01/09/2010 · הודעות: 300 ·
 

הודעה פורסם: 23/01/2021 - 12:23
נושא ההודעה:

א. על איזה גרסת פייתון אתה?
ב. אני לא רואה הבדל בין ההרצות מעבר לכך שאין הדפסה במקרה הראשון ויש במקרה השני (בגלל שההדפסה בהערה)

ב-2 המקרים זה לא מדפיס (לפחות אצלי) את מה שיש בלולאה, זה נובע מכך ש-enumerate הוא איטרטור, ולכן עובר למעשה רק פעם אחת על המידע שנמצא בתוכו, השאלה מה רמת הידע שלך בפייתון, כי אם אתה מתחיל עדיף שתלמד עוד על איך השפה עובדת ואז רק תתקדם לאיטרטורים ואיך הם עובדים, זה לא טריוויאלי
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
פיל-קטןלא בפורום כעת ת.הצטרפות: 02/05/2004 · הודעות: 1089 ·
 

הודעה פורסם: 23/01/2021 - 13:58
נושא ההודעה:

משה צודק.

מה שאתה אמור לראות כשמתבצעות הפקודות בלולאה הוא שכל זוג מודפס בשורה נפרדת. זה לא אמור לקרות באף אחת מהגרסאות.
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
COM64לא בפורום כעת ת.הצטרפות: 09/07/2003 · הודעות: 1608 · מיקום: ראשל"צ
 

הודעה פורסם: 23/01/2021 - 15:51
נושא ההודעה:

התנהגות זהה על פייתון 3.7.3 על דביאן ו-3.7.4 על חלונות


קוד:
counter_1 = []
for i in range(15):
    counter_1.append(i)

enumerate_counter = enumerate(counter_1)
#print(list(enumerate_counter))
for i,j in list(enumerate_counter):
    print(i,j)


0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 14


קוד:
counter_1 = []
for i in range(15):
    counter_1.append(i)

enumerate_counter = enumerate(counter_1)
print(list(enumerate_counter))
for i,j in list(enumerate_counter):
    print(i,j)


[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, Cool, (9, 9), (10, 10), (11, 11), (12, 12), (13, 13), (14, 14)]

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

הודעה פורסם: 23/01/2021 - 18:07
נושא ההודעה:

רמז תבדוק את התוכן של counter_1 עם הפעלה של print(list(enumarate_counter( ובלי .
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
COM64לא בפורום כעת ת.הצטרפות: 09/07/2003 · הודעות: 1608 · מיקום: ראשל"צ
 

הודעה פורסם: 24/01/2021 - 12:15
נושא ההודעה:

Anonymous :
רמז תבדוק את התוכן של counter_1 עם הפעלה של print(list(enumarate_counter( ובלי .


או שאני מפספס משהו בבדיקה או שאני לא מבין כיצד לבצע אותה.

אני מדפיס את התוכן של counter_1 בכמה מקומות בקוד (הוספתי כמה print), עם ובלי השורה:
קוד:
print(list(enumerate_counter))


והתוכן זהה.

אני מנסה לחשוב, הרי זו רשימה שלא נוגעים בתוכן שלה אחרי ה-append בתוך ה-for, יש משהו בקוד שיכול לשנות אותה? ספציפית בהדפסה של תוכן שנוצר כבר?

_________________
איזי גולדנברג
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
mksoftלא בפורום כעתSite Admin ת.הצטרפות: 17/03/2002 · הודעות: 10514 · מיקום: כדור הארץ
 

הודעה פורסם: 24/01/2021 - 12:26
נושא ההודעה:

האיטרציה הראשונה על enumerate_counter ב-print (ה־list כדי לדייק) גומרת אותו. בלולאת ה-for כבר אין כלום.

_________________
הבלוג שלי
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית שלח דוא\ ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
COM64לא בפורום כעת ת.הצטרפות: 09/07/2003 · הודעות: 1608 · מיקום: ראשל"צ
 

הודעה פורסם: 24/01/2021 - 14:18
נושא ההודעה:

OK יש לי עוד ללמוד על ההתנהגות של enumerators
וקיים משהו ש"מחזיר" אותו להתחלה? כמו נניח file_name.seek(0) בקריאה של קובץ מתחילתו?

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

הודעה פורסם: 24/01/2021 - 14:29
נושא ההודעה:

הגדרתי אותו מחדש וזה עבד

אבל איתחול נראה לי יותר הגיוני

איציק
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
mksoftלא בפורום כעתSite Admin ת.הצטרפות: 17/03/2002 · הודעות: 10514 · מיקום: כדור הארץ
 

הודעה פורסם: 24/01/2021 - 19:46
נושא ההודעה:

לא, אפשר להשתמש ב-itertools.tee אם רוצים, ואז מקבלים איטרטורים "מפוצלים".

בד"כ אם רוצים להשתמש שוב, והמחיר לא יקר, הופכים את זה ל-list מראש ומשתמשים ב-list. לחלופין, מגדירים אחד חדש ועובדים עימו.

_________________
הבלוג שלי
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית שלח דוא\ ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
COM64לא בפורום כעת ת.הצטרפות: 09/07/2003 · הודעות: 1608 · מיקום: ראשל"צ
 

הודעה פורסם: 25/01/2021 - 09:53
נושא ההודעה:

תודה, למדתי.

_________________
איזי גולדנברג
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
הצגת הודעות מלפני:     
מעבר אל:  
כל הזמנים הם GMT + 2 שעות
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
PNphpBB2 © 2003-2004 

תוכן הדיון

  1. COM64
  2. משה-נחמיאס
  3. פיל-קטן
  4. COM64
  5. אורח
  6. COM64
  7. mksoft
  8. COM64
  9. אורח
  10. mksoft
  11. COM64