Полезные модули языка для экзамена

Раздел: Прочее -> Образование

Основные библиотеки 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 (пример)

Библиотеки Python для ЕГЭ - comments

En
библиотеки python для егэ (python)