计数器最多可添加10个列表

时间:2016-12-10 01:00:19

标签: python-2.7 list loops

我目前停留在有关列表和制定代码的问题上。我必须 例如,如果list = [4,6]我将不得不返回2.(4 + 6)和(6 + 4)。此代码必须适用于任何长度的列表,并且列表中没有两个数字相同。我是新的列表,并坚持如何开始编码。

def countsum(list):

非常感谢帮助

2 个答案:

答案 0 :(得分:0)

def count_list_aux(num_possibilities, a_list, i, j):
    if i == j: # Only 1 item to check now.
            if a_list[i] == 10: # The item itself is 10 so that can be a combo.
                    return num_possibilities + 1
            else: # Otherwise we are done.
                    return num_possibilities

    else:
            combo = a_list[i] + a_list[j]
            if combo == 10: # (4,6) for instance.
                    return count_list_aux(num_possibilities+2, a_list, i+1, j-1)
            elif combo > 10: # (4,8) for instance. Clearly 8 needs to go when we have a sorted list.
                    return count_list_aux(num_possibilities, a_list, i, j-1)
            else: # (4,7) for instance. Clearly 4 needs to go when we have a sorted list.
                    return count_list_aux(num_possibilities, a_list, i+1, j)

def countsum(a_list):
        a_list = sorted(a_list)
        return count_list_aux(0, a_list, 0, len(a_list)-1)

print(countsum([4,6,3,7,5,2,8]))

我已经制作了一个递归解决方案,我只是对列表进行排序(升序),然后以递归方式将最左侧(i)和最右侧(j)相加,并检查它们是否相加10.如果他们这样做,那么我将num_possibiltiies增加2(例如,6,4和4,6是2个组合)。如果总和大于10,那么我将j递减1,因为很明显,当前索引j不能与列表中的任何其他值一起使用(列表已排序)。类似地,如果总和小于10,我将i递增1,因为当前索引i不能与任何其他值一起使用以获得10的总和(它失败并且索引处的最大值为{ {1}})。

答案 1 :(得分:0)

该功能也可以使用以下方式实现:

from itertools import combinations
from math import factorial

def countsum(L):
    x = 10
    n = 2
    return sum(factorial(n) for c in combinations(L, n) if sum(c) == x)

因子是因为组合产生的元组是项目集,而不是计算每个排列,只需计算它们的计数。因为阶乘依赖于常数,所以可以悬挂它:

def countsum(L):
    x = 10
    n = 2
    return factorial(n) * sum(1 for c in combinations(L, n) if sum(c) == x)