📜  Python程序查找给定总和的所有可能对

📅  最后修改于: 2022-05-13 01:55:43.720000             🧑  作者: Mango

Python程序查找给定总和的所有可能对

给定一个整数列表和一个整数变量K ,编写一个Python程序来查找列表中具有给定总和K的所有对。

例子:

Input : lst =[1, 5, 3, 7, 9]
        K = 12
Output : [(5, 7), (3, 9)]

Input : lst = [2, 1, 5, 7, -1, 4]
        K = 6
Output : [(2, 4), (1, 5), (7, -1)]


方法#1: Pythonic Naive

这是解决上述问题的一种天真的方法。首先,我们取一个空列表“res”并开始一个循环并遍历给定整数列表的每个元素。在每次迭代中,弹出元素,将其存储在 'num' 中,找到总和 K 的剩余差异,并检查给定列表中是否存在差异。

# Python3 program to find all pairs in 
# a list of integers with given sum 
  
def findPairs(lst, K): 
    res = []
    while lst:
        num = lst.pop()
        diff = K - num
        if diff in lst:
            res.append((diff, num))
          
    res.reverse()
    return res
      
# Driver code
lst = [1, 5, 3, 7, 9]
K = 12
print(findPairs(lst, K))
输出:
[(5, 7), (3, 9)]


方法 #2:使用collections.Counter

此方法遵循与上面使用collections.Counter讨论的相同方法。

# Python3 program to find all pairs in 
# a list of integers with given sum 
from collections import Counter
  
def findPairs(lst, K): 
    res = []
    count = Counter(lst)
  
    for x in lst:
        y = K - x
        if (x != y and count[y]) or (x == y and count[y] > 1):
            res.append((x, y)) 
            count.subtract((x, y))
              
    return res
      
# Driver code
lst = [1, 5, 3, 7, 9]
K = 12
print(findPairs(lst, K))
输出:
[(5, 7), (3, 9)]


方法#3: itertools.combinations (朴素方法)

这是使用itertools.combinations的一种天真的方法。我们使用 for 循环遍历每个组合并找出所需的组合。

# Python3 program to find all pairs in 
# a list of integers with given sum 
  
from itertools import combinations
  
def findPairs(lst, K):   
    res = []
    for var in combinations(lst, 2):
        if var[0] + var[1] == K:
            res.append((var[0], var[1]))
          
    return res
      
# Driver code
lst = [1, 5, 3, 7, 9]
K = 12
print(findPairs(lst, K))
输出:
[(5, 7), (3, 9)]


方法#4: itertools.combinations (高效方法)

# Python3 program to find all pairs in 
# a list of integers with given sum 
from itertools import combinations
  
def findPairs(lst, K):
      
    return [pair for pair in combinations(lst, 2) if sum(pair) == K]
      
# Driver code
lst = [1, 5, 3, 7, 9]
K = 12
print(findPairs(lst, K))
输出:
[(5, 7), (3, 9)]