Python 中两个列表中最接近或最接近的值

Closest or nearest value in two list in 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 ,然后将 [0.21, -6.6] 中的 -6.6 与 [0.20, -1.22] 中的 -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")

请帮我写一段代码来实现这个。

你可以这样做:

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。然后我们只对列表中的每个项目执行此操作。

要获得正确答案,您需要使用 input_list 的值 * output_list 的值。

我对 Woody 的回答稍作修改(将值添加为 input_point2),我认为这是满足您要求的结果:

A =[[0.99, -9.58], [0.012, -9.88], [0.22, -9.56], [0.44, -6.6], \
                [0.55, -7.7], [0.21, -6.6]]

B =  [[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_point1, input_point2):
    output_value = min(map(lambda x: [abs(x[0] - input_point1), x[1]], \
                           input_list), key = lambda k: k[0])    
    return [ input_point1, input_point2 * output_value[1] ]

result = list(map(lambda x: FindClosest(A, x[0], x[1]), B))

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