Форум программистов, компьютерный форум, киберфорум
Python: Научные вычисления
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 01.12.2018
Сообщений: 6

Itertools.product изменить порядок генерации

22.10.2019, 20:00. Показов 1689. Ответов 1

Студворк — интернет-сервис помощи студентам
Здравствуйте,
Суть, проблемы описана в следующем посте, только в моем случае будут исключительно числа.
То есть генерация комбинаций должна происходить от наименьшей суммы всех членов к наибольшей. Например,по аналогии с itertools.product, генератор my_product(range(3), repeat=3) должен давать: (0,0,0), (0,0,1),(0,1,0),..,(0,1,1),..,(0,0,2),.. .(2,0,0) и того 27 комбинаций. itertools.product(range(3), repeat=3) дает те же комбинации, но к сожалению, их генерация происходит в другом порядке. Нужного порядка генерации можно добиться методом предложенным в вышеуказанном посте с сортировкой

Python
1
2
def my_product(*args):
    return list(sorted(itertools.product(*args), key=lambda x: (sum(x), x)))
но тогда съедается вся память.
Мне это нужно, чтобы при определенной сумме чисел, которая будет больше пороговой, остановить генерацию. Например, сейчас работает так:

Python
1
2
for i in product(range(excitation + 1), repeat=len(arr[0])):
  if sum(i) <= excitation + 1:
но так как перебирается много не нужных комбинаций, то тратится много времени. Смотрю реализацию функций itertools и ничего рабочего не могу придумать. Пожалуйста, подскажите.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.10.2019, 20:00
Ответы с готовыми решениями:

Результат itertools.product записать в переменную
К примеру, есть у меня два списка, которые я прогнал через itertools.product и результат нужно записать в переменную. Как это сделать?

модуль itertools
Объясните, пожалуйста, работу combination, permutations и product

Перебор itertools
Добрый день, хочу получить значение точки после перебора product itertools в двух переменных y,z в точке x = &gt; например x = (5, 6)...

1
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
23.10.2019, 10:34
Лучший ответ Сообщение было отмечено cyberturist как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
def split(n, cnt):
    if cnt <= 1:
        yield [n]
        return
    for x in range(n+1):
        for xs in split(n-x, cnt-1):
            yield [x] + xs
 
def gen(max_sum, cnt):
    assert max_sum >= 0
    for n in range(max_sum+1):
        yield from split(n, cnt)
Результат:
Code
1
2
3
4
5
6
7
8
9
10
11
12
list(gen(max_sum=2, cnt=3))
 
[[0, 0, 0],
 [0, 0, 1],
 [0, 1, 0],
 [1, 0, 0],
 [0, 0, 2],
 [0, 1, 1],
 [0, 2, 0],
 [1, 0, 1],
 [1, 1, 0],
 [2, 0, 0]]
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.10.2019, 10:34
Помогаю со студенческими работами здесь

python itertools
есть 2 задания которые надо решить через itertools без циклов никак не могу понять их

Изменить порядок элементов в массиве
Напишите программу на python, чтобы изменить порядок элементов в массиве

Использование модуля itertools
Нужно использовать модуль itertools. На вход подается три числа f, s, d; f - количество первых блюд в кафе, s - количество вторых блюд, d -...

Порядок отрицательных членов изменить на обратный, порядок неотрицательных сохранить
Задача (нужно все 3 пункта в 1 программе сделать) Прошу Помочь В условиях задания 3 а) порядок отрицательных членов изменить на...

Порядок отрицательных членов изменить на обратный, порядок неотрицательных сохранить
Задача по делфи(нужно все 3 пункта в 1 программе сделать) Прошу Помочь В условиях задания 3 а) порядок отрицательных членов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru