0Pricing
Python Academy · Lekcja

itertools: iteratory nieskończone i skończone

Proszę używać count, cycle, islice, chain i zip_longest.

itertools: iteratory nieskończone i skończone to bezpłatna lekcja Python Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Python Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Python Academy zawiera 4 lekcji w sumie.

Czym jest itertools?

itertools to moduł biblioteki standardowej udostępniający oszczędne pamięciowo elementy do budowania iteratorów. Wszystkie funkcje zwracają iteratory, a nie listy.

import itertools

# count: infinite counter
for i in itertools.islice(itertools.count(10, 2), 5):
    print(i, end=" ")  # 10 12 14 16 18

count()

count(start, step) generuje nieskończony ciąg arytmetyczny. Należy zawsze łączyć go z islice lub warunkiem przerwania.

import itertools

for n in itertools.count(1, 10):
    if n > 40:
        break
    print(n, end=" ")  # 1 11 21 31 41

cycle()

cycle(iterable) nieskończenie powtarza elementy obiektu iterowalnego.

import itertools

colors = itertools.cycle(["red","green","blue"])
for _ in range(7):
    print(next(colors), end=" ")
# red green blue red green blue red

repeat()

repeat(value, times) zwraca tę samą wartość times razy, a jeśli parametr zostanie pominięty — nieskończenie wiele razy.

import itertools
print(list(itertools.repeat(42, 4)))   # [42, 42, 42, 42]
print(list(map(pow, range(5), itertools.repeat(2))))
# [0, 1, 4, 9, 16]

islice()

islice(it, stop) lub islice(it, start, stop, step) wycina fragment iteratora bez materializowania go.

import itertools

result = list(itertools.islice(range(100), 2, 10, 2))
print(result)  # [2, 4, 6, 8]

chain()

chain(*iterables) łączy wiele obiektów iterowalnych, jeden po drugim, w jeden iterator.

import itertools

result = list(itertools.chain([1,2], [3,4], [5]))
print(result)  # [1, 2, 3, 4, 5]

# chain.from_iterable for a list of iterables:
nested = [[1,2],[3,4]]
print(list(itertools.chain.from_iterable(nested)))

zip_longest()

zip_longest łączy obiekty iterowalne o różnej długości, uzupełniając brakujące wartości za pomocą fillvalue.

import itertools

a = [1, 2, 3]
b = ["a", "b"]
print(list(itertools.zip_longest(a, b, fillvalue=0)))
# [(1, "a"), (2, "b"), (3, 0)]

dropwhile() i takewhile()

takewhile(pred, it) zwraca elementy, dopóki predykat ma wartość True. dropwhile działa odwrotnie.

import itertools

nums = [1, 3, 5, 6, 7, 9]
print(list(itertools.takewhile(lambda x: x % 2, nums)))
# [1, 3, 5]

print(list(itertools.dropwhile(lambda x: x % 2, nums)))
# [6, 7, 9]

filterfalse()

filterfalse(pred, it) zwraca elementy, dla których predykat ma wartość False — jest dopełnieniem filter().

import itertools

evens = list(itertools.filterfalse(lambda x: x%2, range(10)))
print(evens)  # [0, 2, 4, 6, 8]

starmap()

starmap(func, iterable) stosuje funkcję do każdej krotki argumentów pochodzącej z obiektu iterowalnego.

import itertools, operator

pairs = [(2,3),(4,5),(1,10)]
result = list(itertools.starmap(operator.mul, pairs))
print(result)  # [6, 20, 10]

groupby()

groupby(it, key) grupuje kolejne elementy o tej samej wartości klucza. Aby uzyskać poprawne grupowanie, należy najpierw posortować obiekt iterowalny.

import itertools

data = sorted([("a",1),("b",2),("a",3)], key=lambda x:x[0])
for key, group in itertools.groupby(data, key=lambda x:x[0]):
    print(key, list(group))

Szybkie sprawdzenie

Co zwraca itertools.chain([1,2], [3,4])?

Podsumowanie

itertools udostępnia nieskończone iteratory (count, cycle, repeat), wycinanie fragmentów (islice), łączenie (chain, zip_longest) oraz filtrowanie (takewhile, dropwhile, filterfalse). Wszystkie te mechanizmy są leniwe i oszczędne pamięciowo.

Często zadawane pytania

Czy lekcja „itertools: iteratory nieskończone i skończone” jest bezpłatna?

Tak — pełny tekst „itertools: iteratory nieskończone i skończone” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Python Academy, przejdź na CoddyKit PRO. Kurs Python Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „itertools: iteratory nieskończone i skończone”?

Proszę używać count, cycle, islice, chain i zip_longest. Ćwiczysz Python Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Python Academy?

Nie wymagamy żadnego doświadczenia. Python Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „itertools: iteratory nieskończone i skończone”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Python Academy?

Tak. Każda lekcja Python Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. itertools: iteratory nieskończone i skończone
  2. itertools: kombinatoryka
  3. functools: partial i reduce
  4. functools: lru_cache i cached_property
← Powrót do Python Academy