Python – 列表中最接近的总和对
有时,我们希望获得总和为特定元素的元素。但是在我们无法找到的情况下,我们的目标会变为找到最接近的那个。这可以在许多领域中应用。让我们讨论可以执行此任务的某些方式。
方法 #1:使用字典理解 + max()
上述功能的组合可用于执行此任务。在此,我们执行字典理解中的逻辑部分,并使用 max() 提取最接近的对。应该对列表进行排序以执行此方法。
# Python3 code to demonstrate
# Closest Sum Pair in List
# using dictionary comprehension + max()
# Initializing list
test_list = [7, 8, 10, 3, 18, 1]
# printing original list
print("The original list is : " + str(test_list))
# Initializing K
K = 12
# Closest Sum Pair in List
# using dictionary comprehension + max()
test_list.sort()
res = { i + j :(i, j) for i in test_list for j in test_list if i != j and i + j < K}
res = max(res)
# printing result
print ("The closest sum pair is : " + str(res))
输出 :
The original list is : [7, 8, 10, 3, 18, 1]
The closest sum pair is : 11
方法#2:使用循环+ combinations()
这是可以执行此任务的另一种方式。在此,我们遍历列表,计算所有可能的对并返回使用 min() 生成的最接近的可能总和。这将返回实际对。
# Python3 code to demonstrate
# Closest Sum Pair in List
# using loop + combinations
from itertools import combinations
# Initializing list
test_list = [7, 8, 10, 3, 18, 1]
# printing original list
print("The original list is : " + str(test_list))
# Initializing K
K = 12
# Closest Sum Pair in List
# using dictionary comprehension + max()
res = {}
for ele in combinations(test_list, 2):
ele_sum = sum(ele)
try:
res[ele_sum].append(ele)
except KeyError:
res[ele_sum] = [ele]
res = res[min(res, key = lambda ele: abs(ele - K))]
# printing result
print ("The closest sum pair is : " + str(res))
输出 :
The original list is : [7, 8, 10, 3, 18, 1]
The closest sum pair is : [(8, 3), (10, 1)]