2017-08-13 14 views
1

なぜこのコード:このlambdaをPython3で正しく動作させるには?

Tuple parameter unpacking is not supported in python 3

SyntaxError: invalid syntax

は、私は、Python 3.6で実行する場合:のような

import math 

def nearest_location(locations, my_location): 
    return min(enumerate(locations), key=lambda (_, (x, y)): math.hypot(x - my_location[0], y - my_location[1])) 

locations = [(41.56569, 60.60677), (41.561865, 60.602895), (41.566474, 60.605544), (41.55561, 60.63101), (41.564171, 60.604020)] 
my_location = (41.565550, 60.607537) 

print(nearest_location(locations, my_location)) 

スローエラー?

私はそれを自分で修正しようとしましたが、まだそれを取得しません...誰かがそれを修正するのに役立つことができますか?

+0

大丈夫、それはあなたがそれが重複しないと思うように思える、あなたは重複を使用して、それを解決することはできません私はその質問を再開しました。私は他のQ + Aを見つけたときにすでに回答を投稿していました(今すぐ提出してください)、それは適切な複製であると思っていました。ご迷惑をおかけして申し訳ありませんが、数分後にコメントを削除します。 :) – MSeifert

+0

これを重複または削除とマークすると、あなたが私を助けた主なものです。そのために私はあなたに感謝しています。 –

答えて

1

lambdaの引数をpython-3.xでアンパックすることはできません。複数の引数(つまりlambda x, y: x+y)を引き続き受け入れることはできますが、1つの引数をもう一度解凍することはできません(つまり、lambda (x, y): x+y)。

最も簡単な解決策ではなく、アンパックを使用するには、単にインデックス「一つの引数を」次のようになります。

import math 

def nearest_location(locations, my_location): 
    return min(enumerate(locations), key=lambda x: math.hypot(x[1][0] - my_location[0], x[1][1] - my_location[1])) 

locations = [(41.56569, 60.60677), (41.561865, 60.602895), (41.566474, 60.605544), (41.55561, 60.63101), (41.564171, 60.604020)] 
my_location = (41.565550, 60.607537) 

print(nearest_location(locations, my_location)) 
# (0, (41.56569, 60.60677)) 
関連する問題