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个。
答案 0 :(得分: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)]