Ближайшее или ближайшее значение в два списка в Python - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть два списка

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 в [0,20, -1,22] с 0,99,0,012,0.22,0.44,0.55,0.21.и так далее.Если какое-либо ближайшее значение для 0,20 находится в списке, т.е.0,20 является ближайшим к 0,21.затем возьмите второе значение в соответствующем списке т.е.-6,6, затем умножьте -6,6 в [0,21, -6,6] на -1,22 в [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")

Пожалуйста, помогите мне скод для достижения этого.

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Чтобы получить правильный ответ, вам нужно использовать значение 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]]

0 голосов
/ 11 декабря 2018

Вы можете сделать это следующим образом:

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.Затем мы просто делаем это для каждого элемента в списке.

...