Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как "элегантно" перебрать все возможные суммы списка на питоне? Для списка [1, 2, 3] это будет 1, 2, 3, 3, 4, 5, 6.

Влад Аверков Знаток (286), закрыт 5 лет назад
Лучший ответ
extrn Мыслитель (7179) 5 лет назад
from itertools import combinations

lst = [1, 2, 3]
print({sum(x) for n in range(len(lst)) for x in combinations(lst, n + 1)})

не по порядку и в виде множества (чтобы исключить повторы sum([1, 2]) = sum([3]))
если надо в списке и в порядке возрастания, можно завернуть в sorted.
extrnМыслитель (7179) 5 лет назад
только обратил внимание, что повторы допутимы
тогда так
print([sum(x) for n in range(len(lst)) for x in combinations(lst, n + 1)])
опять же, если нужно в порядке возрастания, тогда
print(sorted(sum(x) for n in range(len(lst)) for x in combinations(lst, n + 1)))
Остальные ответы
- - Ученик (101) 5 лет назад
Под каждый вариант отдельная фунция. Пото в цикле её вызываешь. Ну и не забывай максимальное значение установить )
Jurijus Zaksas Искусственный Интеллект (449409) 5 лет назад
1 это у тебя сумма чего с чем?
Все подобные переборы делаются при помощи рекурсии.
Похожие вопросы