Menu
Coddy logo textTech

מודול 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): כל התמורות האפשריות באורך r
  • combinations(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.

quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

challenge icon

אתגר

קל

צרו תוכנית שמשתמשת במודול itertools כדי ליצור ולעבד רצף של קלפי משחק. התוכנית צריכה להדגים את השימוש בפונקציות product() ו-islice().

הנתונים הבאים ניתנים לכם:

  • שתי מחרוזות קלט: אחת לדרגות ואחת לסוגי הקלפים, מופרדות בפסיקים
  • שני מספרים שלמים: מיקומי התחלה וסיום לחיתוך

על התוכנית שלכם:

  1. להשתמש ב-itertools.product() כדי ליצור את כל הצירופים האפשריים של דרגות וסוגי קלפים
  2. להשתמש ב-itertools.islice() כדי לבחור חלק מהצירופים האלה בהתאם למיקומי ההתחלה והסיום הנתונים
  3. לעצב כל קלף בתבנית "Rank of Suit" (למשל, "Ace of Spades")
  4. להדפיס כל קלף מעוצב בשורה חדשה

הקלט יסופק כך:

  • השורה הראשונה: דרגות (מחרוזת מופרדת בפסיקים)
  • השורה השנייה: סוגי קלפים (מחרוזת מופרדת בפסיקים)
  • השורה השלישית: שני מספרים שלמים המופרדים ברווח, עבור מיקומי ההתחלה והסיום

נסו בעצמכם

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 אונליין