Itertools на Python: ленивый перебор комбинаций параметров
Напишите решение на Python и проверьте его на странице.
Другие упражнения по этой теме: Itertools в Python: задачи на комбинации, groupby и ленивые потоки.
Парные испытания конфигураций
В испытательной лаборатории проверяют устойчивость датчиков к перепадам внешних условий. Инженеры перебирают все возможные комбинации настроек из нескольких независимых линеек: диапазона температур, уровней давления и рабочих частот. Хранить полную таблицу всех вариантов в памяти не нужно — конфигурации должны генерироваться последовательно прямо во время работы.
По регламенту проверки проходят парами: сформированный поток тестовых наборов подаётся на два параллельных стенда порциями ровно по две конфигурации за запуск. Если же общее число комбинаций оказывается нечётным, последняя одиночная конфигурация не теряется и не дублируется, а отправляется на стенд в безопасном изолированном режиме.
Настройте генерацию тестовых конфигураций без предварительного сохранения всех комбинаций и разбейте полученный поток на парные запуски для испытательных стендов.
Что уже дано
Заготовка содержит объявление функции paired_configurations(temperatures, pressures, frequencies), которую необходимо реализовать.
Что нужно сделать
Напишите тело функции paired_configurations(temperatures, pressures, frequencies). Она принимает три конечных упорядоченных списка целых чисел (длиной от 0 до 80 элементов каждый, со значениями от -1 000 000 до 1 000 000) и возвращает одноразовый итератор.
Итератор должен выдавать кортежи-пакеты, составленные из конфигураций вида (temperature, pressure, frequency):
- Конфигурации формируются как прямое декартово произведение переданных списков в порядке аргументов: температура меняется медленнее всего, частота — быстрее всего.
- Исходный порядок элементов списков и повторяющиеся значения сохраняются: каждая комбинация генерируется ровно один раз для каждого сочетания позиций.
- Если хотя бы один из списков пуст, итератор не должен выдать ни одной конфигурации.
- Каждый выдаваемый пакет содержит ровно две конфигурации:
((t1, p1, f1), (t2, p2, f2)). - Если общее число комбинаций нечётно, последний пакет содержит ровно одну конфигурацию:
((tn, pn, fn),).
Важное требование к памяти: запрещено материализовать полную таблицу комбинаций в список или другую структуру данных до выдачи первого пакета. Итератор должен формировать элементы лениво. Дополнительные временные выделения памяти при создании итератора и извлечении его первого пакета не должны превышать лимит в 8 388 608 байт (8 МиБ) сверх памяти исходных списков параметров.
Ввод и вывод
Стандартный ввод stdin не используется; вызовы print и вывод в stdout не требуются. Проверяющая система после выполнения вашего кода считывает из области видимости скрипта функцию верхнего уровня paired_configurations и вызывает её напрямую.
Пример использования
print(list(paired_configurations([10], [1], [100, 200, 300])))
Вывод:
[((10, 1, 100), (10, 1, 200)), ((10, 1, 300),)]
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- Как groupby группирует несортированные данные: тест itertools Python
- Itertools на Python: разбейте поток на партии с лимитом
- Itertools на Python: объедините генераторы в непрерывный поток
- Groupby на Python: сводка последовательных серий событий
- Скользящие окна Python: генерация кортежей без загрузки всего потока
- Итераторы Python: сборка кадра из двух потоков без лишнего чтения
