-1

リストの最初の要素とリストの要素の関数の2番目の要素を持つタプルのリストを作成し、関数の出力から最小値を見つけたいと思います。以下のコードは、私が望むものを最もよく説明しています:

x,y = min((x,f(x) for x in array), key = lambda(k, v): v[1])

スクリプトを実行すると、次のようになります。

SyntaxError: invalid syntax

注: f(x) は int/float を返します


更新:別のスタックオーバーフローの質問からコードを書いたので、正確に何をしているのかわかりませんでした。誰かがキーの仕組みを説明できますか?
答えてくれてありがとう:)

4

4 に答える 4

2

括弧を追加する必要があります。

x, y = min(((x,f(x)) for x in array), key = lambda t: t[1][1])

Python 2 と 3 の両方で機能するようにラムダ式を調整しました (パラメーター リストでタプル アンパックを使用することはできません)。

キーは、最小値を知りたい値を返す関数に過ぎないことを思い出してください。入力シーケンスの各要素に対して呼び出されます。この場合、それはタプルであり、戻り値(x, f(x))の 2 番目の要素によって最小値を見つけたいと考えていました。f(x)

于 2013-03-15T21:21:41.820 に答える
1

リスト内包表記で,は、タプル式として解析されません。()パーサーに知らせるためにラップする必要があります。

x,y = min(( (x,f(x)) for x in array), key = lambda(k, v): v[1])
于 2013-03-15T21:21:54.117 に答える
1

私はあなたがこれを望んでいると思います:

x,y = min(((x,f(x)) for x in array), key = lambda(k, v): v)
于 2013-03-15T21:22:14.883 に答える
1

不足している括弧を追加するか、次のようにコードを書き直してください。

y, x = min(zip(map(f, array), array))

にキー関数を提供する必要がないように、タプル要素の順序を入れ替えましたmin()

別のバージョンは次のとおりです。

x = min(array, key=f)
y = f(x)

短くて明確ですが、 への追加の呼び出しを行いf()ます。

于 2013-03-15T21:24:34.313 に答える