0Pricing
Python Academy · Урок

itertools: бесконечные и конечные итераторы

Используйте count, cycle, islice, chain и zip_longest.

«itertools: бесконечные и конечные итераторы» — бесплатный урок Python Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.

Что такое itertools?

itertools — это модуль стандартной библиотеки, предоставляющий экономичные по памяти строительные блоки для создания итераторов. Все функции возвращают итераторы, а не списки.

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) создаёт бесконечную арифметическую последовательность. Всегда используйте его вместе с islice или условием прерывания.

import itertools

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

cycle()

cycle(iterable) бесконечно повторяет итерируемый объект.

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) выдаёт одно и то же значение times раз (бесконечно, если параметр не указан).

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) или islice(it, start, stop, step) извлекает срез итератора, не создавая его целиком в памяти.

import itertools

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

chain()

chain(*iterables) последовательно объединяет несколько итерируемых объектов в один итератор.

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 объединяет итерируемые объекты разной длины, заполняя отсутствующие значения с помощью 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() и takewhile()

takewhile(pred, it) выдаёт элементы, пока предикат истинен. dropwhile выполняет противоположное действие.

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) выдаёт элементы, для которых предикат ложен, то есть дополняет результат filter().

import itertools

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

starmap()

starmap(func, iterable) применяет функцию к каждому кортежу аргументов из итерируемого объекта.

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) группирует идущие подряд элементы с одинаковым значением ключа. Для корректной группировки сначала отсортируйте итерируемый объект.

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))

Быстрая проверка

Что возвращает itertools.chain([1,2], [3,4])?

Итоги

itertools предоставляет бесконечные итераторы (count, cycle, repeat), создание срезов (islice), объединение (chain, zip_longest) и фильтрацию (takewhile, dropwhile, filterfalse). Все они ленивые и экономичны по памяти.

Часто задаваемые вопросы

Урок «itertools: бесконечные и конечные итераторы» бесплатный?

Да — полный текст урока «itertools: бесконечные и конечные итераторы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.

Чему я научусь в уроке «itertools: бесконечные и конечные итераторы»?

Используйте count, cycle, islice, chain и zip_longest. Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Python Academy?

Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «itertools: бесконечные и конечные итераторы»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Python Academy?

Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. itertools: бесконечные и конечные итераторы
  2. itertools: комбинаторика
  3. functools: partial и reduce
  4. functools: lru_cache и cached_property
← Назад к Python Academy