Продвинутый синтаксис
Время: 5-10 мин
itertools.product
itertools.permutations
itertools.combinations
Модуль itertools (product, permutations, combinations)
Тема: Генерация комбинаций, перестановок и декартова произведения
Модуль itertools — главный чит-код для решения Заданий №2, №8 и №24 ЕГЭ. Позволяет в одну строчку перебирать любые комбинаторные структуры.
1. Разница между product, permutations и combinations
| Функция | Повторы элементов? | Порядок важен? | Пример для 'AB', k=2 |
|---|---|---|---|
product('AB', repeat=2) |
ДА (с возвращением) | ДА | AA, AB, BA, BB |
permutations('AB', 2) |
НЕТ (каждый 1 раз) | ДА | AB, BA |
combinations('AB', 2) |
НЕТ | НЕТ | AB |
Разновидности и прототипы задания на экзамене
1. product() — слова с повторениями / наборы (x,y,z,w)
Декартово произведение.
product([0, 1], repeat=4) — все 16 строк таблицы истинности.2. permutations() — перестановки без повторений
Все возможные перестановки букв слова.
permutations('ABC') -> ABC, ACB, BAC, BCA, CAB, CBA.3. combinations() — сочетания (выбор K из N)
Выбор K элементов без учета порядка.
Боевой шаблон решения на Python
Запустить код в онлайн-песочницеБоевой шаблон решения на Python
# === Шпаргалка: itertools на боевых задачах ЕГЭ ===
from itertools import product, permutations, combinations
# 1. Задание 2 ЕГЭ: Все комбинации для 4 переменных:
for x, y, z, w in product([0, 1], repeat=4):
F = (x <= y) and (z <= w)
if F:
pass
# 2. Задание 8 ЕГЭ: Алфавитный список 5-буквенных слов:
words = sorted("КАЛИЙ")
for idx, p in enumerate(product(words, repeat=5), start=1):
w = "".join(p)
if w.count('Й') <= 1 and w[0] != 'Й':
pass
# 3. Перестановки букв слова с удалением дубликатов:
unique_anagrams = set("".join(p) for p in permutations("МОЛОКО"))
print("Уникальных анаграмм слова МОЛОКО:", len(unique_anagrams))
Типичные ошибки
✕ Не так
# ❌ Ошибка: Забыть склеить кортеж в строку
for p in product('ABC', repeat=3):
if p.count('A') == 1: # p — это ('A', 'B', 'C'), а не 'ABC'!
✓ Так
# ✅ Правильно: Склеивать кортеж в строку:
w = ''.join(p)
ГРОБ
ЛОВУШКА: Повторяющиеся символы в permutations()
Если в слове есть одинаковые буквы (например, 'ТАТЬЯНА'), permutations выдаст много одинаковых кортежей.
Как обойти
Всегда оборачивайте результат
permutations в set()!Лайфхаки на экзамене
- Всегда сортируйте алфавит
sorted('СПОРТ'), если в Задании 8 слова идут в алфавитном порядке! - Для нумерации с единицы передавайте
enumerate(..., start=1).