Полезные модули языка для экзамена
Основные библиотеки Python для ЕГЭ
Как быстро вычислить комбинаторные значения?
Эффективным решением является модуль math. Он содержит функции comb (сочетания), perm (размещения) и factorial, что избавляет от ручного написания циклов. Пример:
import math
n = 10
k = 3
print(math.comb(n, k)) # количество сочетаний
print(math.perm(n, k)) # количество размещенийбиблиотеки python для егэ (библиотеки python для егэ)
120 720
Проблема: функции comb и perm доступны только с Python 3.8. В более старых версиях следует использовать math.factorial и собственную формулу: factorial(n) // (factorial(k) * factorial(n-k)).
Как получить все перестановки и комбинации элементов?
Модуль itertools предоставляет ленивые итераторы для комбинаторных задач. Например, функция permutations возвращает все перестановки, а combinations – все сочетания заданной длины. Это удобно при решении задач на перебор.
from itertools import permutations, combinations
items = [1, 2, 3]
print(list(permutations(items, 2)))
print(list(combinations(items, 2)))
[(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)] [(1, 2), (1, 3), (2, 3)]
Ошибка: при больших размерах списка количество комбинаций растет факториально, что может привести к переполнению памяти. Следует использовать итераторы, а не преобразовывать их в список сразу.
Как смоделировать случайные события или сгенерировать данные?
Модуль random позволяет генерировать случайные числа, выбирать случайный элемент из последовательности и перемешивать списки. Это полезно, когда в задаче требуется провести статистический эксперимент или создать тестовые данные.
import random
digits = '0123456789'
password = ''.join(random.choice(digits) for _ in range(6))
print(password)
numbers = [1, 2, 3, 4, 5]
random.shuffle(numbers)
print(numbers)
(пример вывода) 482910 [3, 5, 1, 4, 2]
Ошибка: функция random.seed() часто забывается, из-за чего результаты становятся непредсказуемыми при отладке. Для воспроизводимости стоит явно задавать seed.
Как подсчитать частоту элементов в коллекции?
Класс Counter из модуля collections автоматически подсчитывает количество вхождений каждого элемента. Он заменяет ручные словари и ускоряет решение задач на анализ данных.
from collections import Counter
text = "abracadabra"
cnt = Counter(text)
print(cnt)
print(cnt.most_common(2))
Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})
[('a', 5), ('b', 2)]
Примечание: Counter принимает любую итерируемую последовательность, но для строк он работает посимвольно. Для подсчета слов строку нужно предварительно разбить на список.
Как последовательно применить операцию ко всем элементам?
Функция reduce из модуля functools сворачивает список, последовательно применяя бинарную функцию. Это удобно для поиска произведения, суммы или максимума без явного цикла.
from functools import reduce
numbers = [1, 2, 3, 4]
product = reduce(lambda x, y: x * y, numbers)
print(product)
24
Ошибка: если список пуст, reduce вызовет исключение TypeError. Перед использованием стоит проверить длину списка или передать начальное значение.
Как проверить строку на соответствие шаблону или извлечь данные?
Модуль re поддерживает регулярные выражения. С его помощью можно искать числа в тексте, проверять формат пароля или извлекать подстроки. Это незаменимо при решении задач с обработкой строк.
import re
text = "В 2023 году было 365 дней"
numbers = re.findall(r'\d+', text)
print(numbers)
# Проверка, что строка состоит только из букв
pattern = r'^[a-zA-Z]+$'
print(bool(re.fullmatch(pattern, 'Hello')))
['2023', '365'] True
Типичная ошибка: забывают экранировать обратную косую черту в строке. Лучше использовать сырые строки (r'...'). Также следует учитывать, что re.fullmatch проверяет совпадение со всей строкой, а re.match – с начала строки.
Расширенные примеры использования библиотек
Ниже приведены примеры, демонстрирующие неочевидные возможности стандартных модулей.
1. Модуль math: вычисление количества способов с учетом порядка
При решении задач на комбинаторику часто нужно разместить k элементов из n с учетом порядка. Для этого используется math.perm.
import math
# Сколькими способами можно выбрать 3 разные книги из 10 и расставить их на полке?
print(math.perm(10, 3)) # 720
720
2. itertools.product: декартово произведение
Функция product создает все возможные комбинации из нескольких последовательностей. Это полезно для перебора всех вариантов (например, комбинаторные пароли).
from itertools import product
digits = '01'
# все двухбитные комбинации
for combo in product(digits, repeat=2):
print(''.join(combo))
00 01 10 11
3. random.sample: выборка без повторений
Если нужно выбрать несколько уникальных элементов из списка, используется random.sample.
import random
students = ['Аня', 'Боря', 'Витя', 'Галя', 'Дима']
члены_жюри = random.sample(students, 2)
print(члены_жюри)
['Боря', 'Дима'] (пример)
4. collections.defaultdict: словарь с автоматическим значением по умолчанию
Класс defaultdict упрощает подсчет, избавляя от проверки наличия ключа.
from collections import defaultdict
scores = [('Маша', 5), ('Петя', 3), ('Маша', 4)]
d = defaultdict(list)
for name, score in scores:
d[name].append(score)
print(dict(d))
{'Маша': [5, 4], 'Петя': [3]}
5. functools.lru_cache: мемоизация для ускорения рекурсии
Декоратор lru_cache запоминает результаты вызовов функций, ускоряя рекурсивные вычисления (например, числа Фибоначчи).
from functools import lru_cache
@lru_cache(maxsize=None)
def fib(n):
if n < 2:
return n
return fib(n-1) + fib(n-2)
print(fib(50))
12586269025
6. re.split: разбиение строки по шаблону
Метод re.split позволяет разбить строку не только по одному символу, но и по регулярному выражению.
import re
line = "apple;banana, orange|grape"
fruits = re.split(r'[;,\s|]+', line)
print(fruits)
['apple', 'banana', 'orange', 'grape']
7. Комбинация библиотек: генерация уникального кода
Пример совместного использования itertools.permutations и random.choice для создания случайного пароля из всех перестановок заданных символов.
import itertools, random
letters = 'ABC'
all_perms = list(itertools.permutations(letters))
random_password = ''.join(random.choice(all_perms))
print(random_password)
CBA (пример)