2017-06-19 36 views
0
def summify(array, number): 
    returnList = [] 
    if type(array).__name__ == 'list': 
     for k in range(0, len(array)): 
      for kk in range(k, len(array)): 
       if array[k] + array[kk] == number: 
        returnList.append([array[k],array[kk]]) 
    else: 
     return [] 

我真的不知道什麼是這個問題的最佳標題。我想要做的是給一個數組(python列表),然後在參數中給定一個特定的數字,我希望該函數從列表中返回一組項目,這將添加到該數字。經過幾次的列表

例如,

>>> summify([1,2,3,4,5,6,7,8,9,10], 10) 
[[1,2,3,4] 
[1,5,4] 
[2,3,5]] 
... 

而且加起來也就10

+4

查看[揹包問題](https://en.wikipedia.org/wiki/Knapsack_problem)。 –

+4

你的問題是什麼? –

回答

1

沒有指定數組所需要的長度,但這裏的每另一組是做到這一點的一種方法:

import itertools 

def summify(num_list, target): 
    for v in range(len(num_list)): 
     for combo in itertools.combinations(num_list, v): 
      if sum(combo) == target: 
       print combo 


t = range(1,11) 

summify(t, 10) 

(10,) 
(1, 9) 
(2, 8) 
(3, 7) 
(4, 6) 
(1, 2, 7) 
(1, 3, 6) 
(1, 4, 5) 
(2, 3, 5) 
(1, 2, 3, 4) 

這裏是另一種方式:

def summify(num_list, num): 
    for v in range(len(num_list)): 
     combos = filter(lambda x: sum(x) == num, itertools.combinations(num_list, v)) 
     if combos: 
      print combos 

summify(t, 10) 

[(10,)] 
[(1, 9), (2, 8), (3, 7), (4, 6)] 
[(1, 2, 7), (1, 3, 6), (1, 4, 5), (2, 3, 5)] 
[(1, 2, 3, 4)]