Python 在列表中找出三个和的数目

Python 在列表中找出三个和的数目,python,python-3.x,list,hash,Python,Python 3.x,List,Hash,如果给你一份清单 numList = [1,2,3,4,5,6,7] 你需要找出三个和的数字,加在一个特定的数字上 target = 10 你怎么能想出答案 例如,组合:[1,3,6],[1,2,7],[2,3,5],[1,4,5] 将导致返回值4 我知道如何使用基于散列的函数,使用下面的代码为解决方案生成一个三和,但不确定如何添加所有唯一的三和解决方案 def find3Numbers(A,arr_size,sum): for i in range(0,arr_size-1):

如果给你一份清单

numList = [1,2,3,4,5,6,7]
你需要找出三个和的数字,加在一个特定的数字上

target = 10
你怎么能想出答案

例如,组合:
[1,3,6],[1,2,7],[2,3,5],[1,4,5]
将导致返回值
4

我知道如何使用基于散列的函数,使用下面的代码为解决方案生成一个三和,但不确定如何添加所有唯一的三和解决方案

def find3Numbers(A,arr_size,sum): 
    for i in range(0,arr_size-1): 
        #Find pair in subarray A[i+1..n-1]  
        # with sum equal to sum - A[i] 
        s = set() 
        curr_sum = sum - A[i] 
        for j in range(i+1,arr_size): 
            if (curr_sum - A[j]) in s: 
                print("Triplet is", A[i],  
                        ", ", A[j], ", ", curr_sum-A[j]) 
                return True
            s.add(A[j]) 

    return False

您只需调整解决方案以计算解决方案,而不是在找到第一个解决方案后返回:

def find3Numbers(A,arr_size,sum):
    count_sums = 0

    for i in range(0,arr_size-1): 
        #Find pair in subarray A[i+1..n-1]  
        # with sum equal to sum - A[i] 
        s = set() 
        curr_sum = sum - A[i] 
        for j in range(i+1,arr_size): 
            if (curr_sum - A[j]) in s: 
                count_sums += 1 # Count here
            s.add(A[j]) 

    return count_sums # Finally return the count

请注意,这并不是说您的算法现在是正确的。接下来,您可能希望对
s
使用计数集而不是常规集。请参阅。

使用


组合查找所有可能的组合,然后我只筛选出那些加起来有10个的组合

看起来像是家庭作业问题,但是
itertools。这里会想到组合
…注意:使用隐藏python内置类型或函数的变量或参数名称是个坏主意(例如,一个名为
sum
的参数)。
from itertools import combinations

numList = [1,2,3,4,5,6,7]

def check(value):
    return sum(value) == 10

filtered = list(filter(check, list(combinations(numList, 3))))
print(filtered)
#[(1, 2, 7), (1, 3, 6), (1, 4, 5), (2, 3, 5)]