带数字置换和组合的加法

问题描述

我需要动态获取一组数字作为用户输入,并执行不同数字组合的总和以获得特定总和

在下面的示例中,我有6个数字作为输入,但可以从3变为20 ''' Num_list = 6,5,4,3,2,1 预期总和= 9

Following combinations give a sum of 9
  • 6 + 3
    5 + 4
    6 + 2 + 1
    4 + 3 + 2

'''

解决方法

正如balderman所指出的,我们可以使用itertools中的函数,即combinations来生成子序列,而filterfalse可以删除总和不正确的序列:

Num_list = list(range(6,-1))
Expected_sum = 9

import itertools

print("Num_list =",end=' ')
print(*Num_list,sep=',')
print("Expected sum =",Expected_sum)
print("Following combinations give a sum of",Expected_sum)
for e in itertools.filterfalse(lambda c: sum(c) != Expected_sum,(c for r in range(1,1+len(Num_list))
                                  for c in itertools.combinations(Num_list,r)
                              )):
    print(*e,sep='+')