Menu
Coddy logo textTech

Moduł itertools

Lekcja 8 z 13 w kursie Iteratory w Pythonie w Coddy.

Moduł itertools w Pythonie to potężny zbiór szybkich i oszczędnych pod względem pamięci narzędzi do pracy z iteratorami. Udostępnia zestaw funkcji tworzących iteratory, które umożliwiają wydajne wykonywanie pętli i przetwarzanie danych. Przyjrzyjmy się niektórym z najbardziej przydatnych funkcji tego modułu.

Importowanie itertools

import itertools

Nieskończone iteratory

Te iteratory będą działać bez końca, chyba że je zatrzymasz:

  • count(start, step): Zlicza w górę w nieskończoność, zaczynając od podanej wartości
  • cycle(iterable): Bez końca cyklicznie przechodzi przez obiekt iterowalny
  • repeat(elem, [n]): Powtarza element n razy (w nieskończoność, jeśli n nie zostanie podane)

Iteratory kończące działanie po wyczerpaniu najkrótszej sekwencji wejściowej

  • chain(*iterables): Łączy ze sobą wiele obiektów iterowalnych
  • islice(iterable, start, stop[, step]): Wycina fragment iteratora
  • zip_longest(*iterables, fillvalue=None): Działa podobnie do zip(), ale kontynuuje działanie, dopóki nie zostanie wyczerpany najdłuższy obiekt iterowalny

Iteratory kombinatoryczne

  • product(*iterables, repeat=1): Iloczyn kartezjański wejściowych obiektów iterowalnych
  • permutations(iterable, r=None): Wszystkie możliwe permutacje o długości r
  • combinations(iterable, r): Kombinacje o długości r w posortowanej kolejności

Przykładowe użycie

import itertools

# Użycie count
for i in itertools.count(10, 2):
    if i > 20:
        break
    print(i)  # Wyświetla 10, 12, 14, 16, 18, 20

# Użycie cycle
colors = itertools.cycle(['red', 'green', 'blue'])
for _ in range(6):
    print(next(colors))  # Wyświetla red, green, blue, red, green, blue

# Użycie chain
numbers = itertools.chain([1, 2, 3], [4, 5, 6])
print(list(numbers))  # Wyświetla [1, 2, 3, 4, 5, 6]

# Użycie combinations
letters = 'ABCD'
print(list(itertools.combinations(letters, 2)))
# Wyświetla [('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'C'), ('B', 'D'), ('C', 'D')]

Moduł itertools udostępnia wiele innych funkcji, z których każda została zaprojektowana z myślą o wydajnym rozwiązywaniu określonych problemów związanych z iteracją. Korzystając z tych narzędzi, możesz pisać bardziej zwięzły i wydajniejszy kod podczas pracy z iteratorami i obiektami iterowalnymi w Pythonie.

quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

challenge icon

Wyzwanie

Łatwy

Utwórz program, który używa modułu itertools do generowania i przetwarzania sekwencji kart do gry. Program powinien demonstrować użycie funkcji product() i islice().

Otrzymujesz następujące dane:

  • Dwa ciągi wejściowe: jeden z rangami, a drugi z kolorami, oddzielone przecinkami
  • Dwie liczby całkowite: pozycje początkową i końcową wycinka

Twój program powinien:

  1. Użyć itertools.product(), aby wygenerować wszystkie możliwe kombinacje rang i kolorów
  2. Użyć itertools.islice(), aby wybrać część tych kombinacji na podstawie podanych pozycji początkowej i końcowej
  3. Sformatować każdą kartę jako "Rank of Suit" (np. "Ace of Spades")
  4. Wypisać każdą sformatowaną kartę w nowym wierszu

Dane wejściowe będą podane w następujący sposób:

  • Pierwszy wiersz: rangi (ciąg rozdzielony przecinkami)
  • Drugi wiersz: kolory (ciąg rozdzielony przecinkami)
  • Trzeci wiersz: dwie liczby całkowite oddzielone spacją, określające pozycje początkową i końcową

Spróbuj swoich sił

import itertools

# Wczytaj dane wejściowe
ranks = input().split(',')
suits = input().split(',')
start, stop = map(int, input().split())

# TODO: Napisz swój kod poniżej
# Użyj itertools.product(), aby wygenerować wszystkie możliwe kombinacje figur i kolorów kart
# Użyj itertools.islice(), aby wybrać część tych kombinacji
# Sformatuj każdą kartę jako "Rank of Suit"

# Wypisz każdą sformatowaną kartę w nowym wierszu
# print(card)

Wszystkie lekcje w sekcji Iteratory w Pythonie

Poćwicz samodzielnie: Kompilator Python online