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)]