まず、Euclidian distanceを取得する関数を定義する必要があります。 1つの方法は、タプルを複素数に変換し、それらの絶対差を得ることです。
>>> dist = lambda t1, t2: abs(complex(*t1) - complex(*t2))
また、独自の関数を定義することもできます。最小距離を持つ値を見つけたい場合は、平方根をとる必要はありません。 この機能を組み込みのmin
のキー機能として使用できます。あなたはすべての最小値を取得したい場合は
>>> l = [(0,0), (1,1), (2,3), (3,4), (4,5)]
>>> x = (3,0)
>>> min(l, key = lambda y: dist(y, x))
(1, 1)
は、あなたが変数にその値を格納し、その距離、その値に等しいすべての値を取得するには、リストの内包表記を使用することができます。
あなたがそれらのランダムな値をしたい場合は
>>> m = min(dist(y, x) for y in l)
>>> [y for y in l if dist(x, y) == m]
[(1, 1)]
、使用
random.choice
:
>>> random.choice(_)
(1, 1)
ただし、この方法は二回リストを反復処理し、また、二回各値の距離を計算すること - (任意の)最小値を見つけるために1回、次に、その最小値と各値を比較するためにもう一度入力します。パフォーマンスが非常に重要な場合は、@Kasramvdの服装を使用する必要があります。ここで
1)はい。 2)はい。それを試しましたか? –
@DisplayName私はこれをどのように1行で行うのか分かりません。 3行のコードについては、そうです。 –