Ну вот вам заготовка с сортировкой от самых ближних по метрике значений, до самых дальних. Обычно в качестве метрики используется сумма квадратов разностей, но можно и сумму абсолютных разностей использовать и другие метрики:
gur = (6, 11, 2, 6, 6, 7, 10, 6)
data = (
(7, 2, 7, 3, 7, 4, 4, 6),
(5, 6, 1, 7, 3, 7, 1, 6),
(3, 3, 4, 5, 4, 4, 4, 4),
(5, 7, 3, 3, 5, 4, 6, 8),
(5, 2, 5, 6, 5, 5, 6, 8),
(6, 4, 7, 5, 4, 5, 5, 7),
(7, 6, 8, 8, 7, 5, 7, 7),
(5, 12, 11, 8, 6, 11, 8, 6),
(4, 13, 9, 5, 1, 6, 6, 5),
(13, 7, 6, 14, 10, 4, 5, 14),
(8, 6, 7, 8, 12, 4, 3, 7),
(8, 3, 9, 10, 3, 1, 6, 10),
(4, 11, 7, 8, 6, 8, 3, 5),
)
print(*sorted(data, key=lambda x: sum((a-b)**2 for a, b in zip(gur, x))), sep='\n')
Вывод (от самых ближних по метрике, до самых дальних):
(5, 7, 3, 3, 5, 4, 6, 8)
(7, 6, 8, 8, 7, 5, 7, 7)
(4, 11, 7, 8, 6, 8, 3, 5)
(4, 13, 9, 5, 1, 6, 6, 5)
(5, 12, 11, 8, 6, 11, 8, 6)
(6, 4, 7, 5, 4, 5, 5, 7)
(5, 2, 5, 6, 5, 5, 6, 8)
(5, 6, 1, 7, 3, 7, 1, 6)
(3, 3, 4, 5, 4, 4, 4, 4)
(8, 6, 7, 8, 12, 4, 3, 7)
(7, 2, 7, 3, 7, 4, 4, 6)
(8, 3, 9, 10, 3, 1, 6, 10)
(13, 7, 6, 14, 10, 4, 5, 14)
С метрикой abs(a-b)
вывод будет уже немного другой:
(4, 11, 7, 8, 6, 8, 3, 5)
(5, 7, 3, 3, 5, 4, 6, 8)
(5, 12, 11, 8, 6, 11, 8, 6)
(5, 6, 1, 7, 3, 7, 1, 6)
(7, 6, 8, 8, 7, 5, 7, 7)
(5, 2, 5, 6, 5, 5, 6, 8)
(6, 4, 7, 5, 4, 5, 5, 7)
(4, 13, 9, 5, 1, 6, 6, 5)
(3, 3, 4, 5, 4, 4, 4, 4)
(7, 2, 7, 3, 7, 4, 4, 6)
(8, 6, 7, 8, 12, 4, 3, 7)
(8, 3, 9, 10, 3, 1, 6, 10)
(13, 7, 6, 14, 10, 4, 5, 14)
Одно значение можно получить, если использовать min
вместо sorted
:
print(min(data, key=lambda x: sum((a-b)**2 for a, b in zip(gur, x))))
Вывод:
(5, 7, 3, 3, 5, 4, 6, 8)