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 itertoolsNieskoń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ścicycle(iterable): Bez końca cyklicznie przechodzi przez obiekt iterowalnyrepeat(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 iterowalnychislice(iterable, start, stop[, step]): Wycina fragment iteratorazip_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 iterowalnychpermutations(iterable, r=None): Wszystkie możliwe permutacje o długości rcombinations(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.
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wyzwanie
ŁatwyUtwó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:
- Użyć
itertools.product(), aby wygenerować wszystkie możliwe kombinacje rang i kolorów - Użyć
itertools.islice(), aby wybrać część tych kombinacji na podstawie podanych pozycji początkowej i końcowej - Sformatować każdą kartę jako "Rank of Suit" (np. "Ace of Spades")
- 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
2Tworzenie własnych iteratorów
Implementowanie __iter__()Implementowanie __next__()Iteratory nieskończonePoćwicz samodzielnie: Kompilator Python online