首页 > 解决方案 > Python中两个列表中最接近或最接近的值

问题描述

我有两个清单

Calculated_list:  [[0.99, -9.58], [0.012, -9.88], [0.22, -9.56], [0.44, -6.6], 
                    [0.55, -7.7], [0.21, -6.6]]
Output_list:  [[0.20, -1.22], [0.22, -1.44], [0.1, -1.55], [0.43, -1.88], [0.34, 
                           1.9], [0.33, 0.2]]

我需要将每个输出列表列表中的第一个值与每个计算列表列表中的第一个值进行比较并找到最接近的值。例如:我需要将 [0.20,-1.22] 中的 0.20 与 0.99,0.012,0.22,0.44,0.55,0.21 进行比较。等等。如果列表中有任何最接近 0.20 的值,即;0.20 最接近 0.21。然后取对应列表中的第二个值,即;-6.6 ,然后将 -6.6 in[0.21, -6.6] 与 -1.22 in [0.20, -1.22] 相乘。

我试过的:

for i in range(len(req_outlist)):
for j in range(len(reqlist)):
    #print(req_outlist[j])
    if (float(req_outlist[i][0])-float(reqlist[j][0]))==0:
        print(reqlist[j][0])

    else:
        print(" Closest Value")

请帮助我提供一个代码来实现这一点。

标签: pythonlistclosest

解决方案


你可以这样做:

calculated_list = [[0.99, -9.58], [0.012, -9.88], [0.22, -9.56], [0.44, -6.6], 
    [0.55, -7.7], [0.21, -6.6]]
output_list = [[0.20, -1.22], [0.22, -1.44], [0.1, -1.55], [0.43, -1.88], [0.34, 1.9], 
    [0.33, 0.2]]

def FindClosest(input_list, input_point):
    output_value = min(map(lambda x: [abs(x[0] - input_point[0]), x[1]], input_list), key = lambda k: k[0])
    return [ input_point[0], input_point[1] * output_value[1] ]

result = list(map(lambda x: FindClosest(calculated_list, x), output_list))
print(result)
>>> [[0.2, 8.052], [0.22, 13.7664], [0.1, 15.314000000000002], [0.43, 12.408], [0.34, -12.54], [0.33, -1.32]]

本质上,这段代码所做的只是在列表上运行,并将您提交的值input_point与该索引处的子列表中的第一项之间的差异与当前的最小差异进行比较。如果小于,则计算该值并更新最小差值。最后,它附加到result. 然后我们只需对列表中的每个项目执行此操作。


推荐阅读