📜  Python – 列表中最接近的总和对

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

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