Создание списка из 1-4 чисел, которые добавляются к числу x в соответствии со списком

Однако я до сих пор ничего не добился в этом. Все, что я хочу сделать, это создать список чисел в соответствии со списком чисел, который я получаю из API, который, например, составляет определенное число X.

Он не должен содержать дубликатов и должен состоять из 1–4 номеров.

Готовый список:

[200, 500, 700, 199, 200, 54543, 432]

Допустим, я хотел бы создать список чисел, которые в сумме составляют 1500 или меньше. Он должен вернуться

[700, 500, 200]

Вы имеете в виду под "1500 или менее" ближайший к 1500?

Elio Bteich 27.03.2022 23:45

Да, извините за расплывчатое объяснение.

frames 28.03.2022 00:54
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
38
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Прямой (неоптимизированный) подход состоит в том, чтобы сгенерировать все возможные комбинации c, а затем отфильтровать те, в которых есть sum(c) <= 1500:

>>> premade_list = [200, 500, 700, 199, 200, 54543, 432]
>>> import itertools
>>> [list(c) for n in range(1, 5) for c in itertools.combinations(premade_list, n) if sum(c) <= 1500]
[[200], [500], [700], [199], [200], [432], [200, 500], [200, 700], [200, 199], [200, 200], [200, 432], [500, 700], [500, 199], [500, 200], [500, 432], [700, 199], [700, 200], [700, 432], [199, 200], [199, 432], [200, 432], [200, 500, 700], [200, 500, 199], [200, 500, 200], [200, 500, 432], [200, 700, 199], [200, 700, 200], [200, 700, 432], [200, 199, 200], [200, 199, 432], [200, 200, 432], [500, 700, 199], [500, 700, 200], [500, 199, 200], [500, 199, 432], [500, 200, 432], [700, 199, 200], [700, 199, 432], [700, 200, 432], [199, 200, 432], [200, 500, 199, 200], [200, 500, 199, 432], [200, 500, 200, 432], [200, 700, 199, 200], [200, 199, 200, 432], [500, 199, 200, 432]]

Если вы специально пытаетесь найти один предмет, который стоит от ближайший до 1500, вы можете взять min разницы:

>>> list(min((
...     c for n in range(1, 5)
...     for c in itertools.combinations(premade_list, n)
...     if sum(c) <= 1500
... ), key=lambda c: 1500 - sum(c)))
[200, 500, 700]

Другие вопросы по теме