Однако я до сих пор ничего не добился в этом. Все, что я хочу сделать, это создать список чисел в соответствии со списком чисел, который я получаю из API, который, например, составляет определенное число X.
Он не должен содержать дубликатов и должен состоять из 1–4 номеров.
Готовый список:
[200, 500, 700, 199, 200, 54543, 432]
Допустим, я хотел бы создать список чисел, которые в сумме составляют 1500 или меньше. Он должен вернуться
[700, 500, 200]
Да, извините за расплывчатое объяснение.






Прямой (неоптимизированный) подход состоит в том, чтобы сгенерировать все возможные комбинации 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]
Вы имеете в виду под "1500 или менее" ближайший к 1500?