ソートされていないサイズの2次元タプルのリストがありnます。XとYに最も近い寸法のタプルを見つけたいのですが、これを行うための最良の方法は何ですか?
target = (75, 75)
values = [
(38, 61),
(96, 36),
(36, 40),
(99, 83),
(74, 76),
]
とを使用するtargetとvalues、メソッドは答えを生成する必要があります(74, 76)。
編集
以下の答えは、ここに着陸する人のために、この正確な方法に私を導きます:
def distance(item, target):
return ((item[0] - target[0]) ** 2 + (item[1] - target[1]) ** 2) ** 0.5
best = min(values, key=lambda x: distance(x, target))
これはデカルト距離の問題です。
- まず、テスト値の2乗
xから最適x値を引いたものを取ります。 - 次に、テスト値の2乗
yから最適y値を引いたものを取ります。 - 最後に、ステップ1とステップ2の平方根を取ります。これにより、距離がわかります。
- これをリスト内のすべてのアイテムに適用すると、(
min関数を使用して)最小の数値が最適になります。