经历了几次列表

时间:2017-06-19 00:17:53

标签: python list recursion

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个。

1 个答案:

答案 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)]
相关问题