מודול itertools
שיעור 8 מתוך 13 בקורס איטרטורים ב-Python של Coddy.
המודול itertools ב-Python הוא אוסף רב-עוצמה של כלים מהירים ויעילים בזיכרון לעבודה עם איטרטורים. הוא מספק קבוצה של פונקציות שיוצרות איטרטורים ללולאות ולעיבוד נתונים יעילים. בואו נבחן כמה מהפונקציות השימושיות ביותר במודול הזה.
ייבוא itertools
import itertoolsאיטרטורים אינסופיים
האיטרטורים האלה ימשיכו לפעול ללא הגבלה, אלא אם תעצרו אותם:
count(start, step): סופר כלפי מעלה ללא הגבלה, החל מערך התחלהcycle(iterable): עובר שוב ושוב על איברי אובייקט בר-איטרציה ללא הגבלהrepeat(elem, [n]): חוזר על איבר n פעמים (ללא הגבלה אם n לא צוין)
איטרטורים שמסתיימים כשמסתיימת סדרת הקלט הקצרה ביותר
chain(*iterables): משׁרשר כמה אובייקטים בני-איטרציהislice(iterable, start, stop[, step]): חותך איטרטורzip_longest(*iterables, fillvalue=None): כמו zip(), אבל ממשיך עד שאובייקט בר-האיטרציה הארוך ביותר מוצה
איטרטורים קומבינטוריים
product(*iterables, repeat=1): מכפלה קרטזית של אובייקטי הקלט בני-האיטרציהpermutations(iterable, r=None): כל התמורות האפשריות באורך rcombinations(iterable, r): צירופים באורך r בסדר ממוין
דוגמאות לשימוש
import itertools
# שימוש ב-count
for i in itertools.count(10, 2):
if i > 20:
break
print(i) # מדפיס 10, 12, 14, 16, 18, 20
# שימוש ב-cycle
colors = itertools.cycle(['red', 'green', 'blue'])
for _ in range(6):
print(next(colors)) # מדפיס red, green, blue, red, green, blue
# שימוש ב-chain
numbers = itertools.chain([1, 2, 3], [4, 5, 6])
print(list(numbers)) # מדפיס [1, 2, 3, 4, 5, 6]
# שימוש ב-combinations
letters = 'ABCD'
print(list(itertools.combinations(letters, 2)))
# מדפיס [('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'C'), ('B', 'D'), ('C', 'D')]
המודול itertools מספק פונקציות רבות נוספות, שכל אחת מהן נועדה לפתור ביעילות בעיות איטרציה מסוימות. בעזרת הכלים האלה אפשר לכתוב קוד תמציתי ויעיל יותר כשעובדים עם איטרטורים ואובייקטים בני-איטרציה ב-Python.
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
אתגר
קלצרו תוכנית שמשתמשת במודול itertools כדי ליצור ולעבד רצף של קלפי משחק. התוכנית צריכה להדגים את השימוש בפונקציות product() ו-islice().
הנתונים הבאים ניתנים לכם:
- שתי מחרוזות קלט: אחת לדרגות ואחת לסוגי הקלפים, מופרדות בפסיקים
- שני מספרים שלמים: מיקומי התחלה וסיום לחיתוך
על התוכנית שלכם:
- להשתמש ב-
itertools.product()כדי ליצור את כל הצירופים האפשריים של דרגות וסוגי קלפים - להשתמש ב-
itertools.islice()כדי לבחור חלק מהצירופים האלה בהתאם למיקומי ההתחלה והסיום הנתונים - לעצב כל קלף בתבנית "Rank of Suit" (למשל, "Ace of Spades")
- להדפיס כל קלף מעוצב בשורה חדשה
הקלט יסופק כך:
- השורה הראשונה: דרגות (מחרוזת מופרדת בפסיקים)
- השורה השנייה: סוגי קלפים (מחרוזת מופרדת בפסיקים)
- השורה השלישית: שני מספרים שלמים המופרדים ברווח, עבור מיקומי ההתחלה והסיום
נסו בעצמכם
import itertools
# קראו את הקלט
ranks = input().split(',')
suits = input().split(',')
start, stop = map(int, input().split())
# TODO: כתבו את הקוד שלכם למטה
# השתמשו ב-itertools.product() כדי ליצור את כל הצירופים האפשריים של דרגות וסוגי קלפים
# השתמשו ב-itertools.islice() כדי לבחור חלק מהצירופים האלה
# עצבו כל קלף בתבנית "Rank of Suit"
# הדפיסו כל קלף מעוצב בשורה חדשה
# print(card)כל השיעורים ביחידה איטרטורים ב-Python
תרגלו בעצמכם: קומפיילר Python אונליין