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

时间:2018-12-11 15:11:13

标签: python list closest

我有两个列表

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

请通过代码帮助我实现这一目标。

2 个答案:

答案 0 :(得分:0)

您可以这样做:

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

答案 1 :(得分:0)

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

我对伍迪的答案做了些微更改(将值添加为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]]