Перейти до основного вмісту
Модуль 6 · Урок 4 із 424/36 у курсі~12 min
Модульні уроки (4/4)

Основні інструменти itertools

Python надає багато інструментів ітерації: деякі є вбудованими (завжди доступні), інші живуть у модулі itertools стандарту бібліотека. Ось найважливіші з них.

enumerate: індекс + значення

Коли вам потрібні як індекс, так і елемент під час циклу:

Python
for i, parola in enumerate(["a", "b", "c"]):
    print(i, parola)
# 0 a
# 1 b
# 2 c

# parte da un altro numero:
for i, parola in enumerate(["a", "b", "c"], start=1):
    print(i, parola)

zip: повторити паралельно

Поєднує кілька ітерованих елементів поелементно:

Python
nomi = ["Ada", "Linus", "Grace"]
eta = [36, 54, 85]

for n, e in zip(nomi, eta):
    print(f"{n} ha {e} anni")

zip зупиняється на найкоротшій ітерації. Для «довгого» використання itertools.zip_longest.

Створення dict з двох паралельних списків:

Python
dict(zip(nomi, eta))
# {'Ada': 36, 'Linus': 54, 'Grace': 85}

itertools.chain: конкатенація ітерованих елементів

Python
from itertools import chain
list(chain([1, 2], [3, 4], [5]))
# [1, 2, 3, 4, 5]

Без створення проміжного списку: корисно для файлів, генераторів тощо.

itertools.count та repeat: нескінченні ітератори

Python
from itertools import count, repeat

# count(start, step) — interi crescenti infiniti
for i in count(10, 2):
    if i > 20: break
    print(i)
# 10, 12, 14, 16, 18, 20

# repeat(x, n) — ripete lo stesso valore n volte (o all'infinito senza n)
list(repeat("ok", 3))   # ['ok', 'ok', 'ok']

itertools.combinations

Усі комбінації (без повторень, незалежні від порядку) даного довжина:

Python
from itertools import combinations
list(combinations([1, 2, 3, 4], 2))
# [(1,2), (1,3), (1,4), (2,3), (2,4), (3,4)]

Замовлений варіант: permutations. Варіанти з повторенням: combinations_with_replacement та product.

zip() для словників і незбалансованих ітерацій

Функція zip() зупиняється, щойно вичерпується найкоротша ітерація введення. Якщо ви хочете об’єднати елементи в пари та зберегти будь-які надлишкові значення (заповнивши їх значенням за замовчуванням, наприклад None), ви можете використовувати zip_longest() з модуля itertools. Крім того, ви можете передати результат zip безпосередньо до dict(), щоб миттєво створити карту ключ-значення.

Спробуйте

вправи#python.m6.l4.e1
Спроби: 0Завантаження…

Враховуючи паралельні списки `countries = ['Italia', 'Francia', 'Spagna']` і `capitals = ['Roma', 'Parigi', 'Madrid']`, створіть `mapping` як dict {country: capital}. Оцініть `відображення`.

Завантаження редактора…
Показати підказку

dict(zip(країни, столиці))

Рішення доступне після 3 спроб

Повторна вправа

вправи#python.m6.l4.e2
Спроби: 0Завантаження…

Якщо `words = ['ciao', 'mondo', 'python']`, побудуйте `enumerated_items` як список кортежів (i, слово), починаючи з i=1. Оцініть `enumerated_items`.

Завантаження редактора…
Показати підказку

enumerate(words, start=1) → (i, value) кортежі.

Рішення доступне після 3 спроб

Додатковий виклик

вправи#python.m6.l4.e3
Спроби: 0Завантаження…

Given two lists `keys = ['a', 'b', 'c']` and `values = [10, 20, 30]`, use `zip` to pair them and convert the result into a dictionary. Store the resulting dictionary in `my_dict` and evaluate it.

Завантаження редактора…
Показати підказку

Використовуйте dict(zip(keys, values)) і призначте його my_dict.

Рішення доступне після 3 спроб