アプリ版:「スタンプのみでお礼する」機能のリリースについて

初心者向けと言われPythonを始めましたのですがリファレンスガイドを読むだけで四苦八苦しています
そこでPythonのlambdaについてお聞きします

例えばmin()関数に使えるkey=のlambdaの書き方を知りたいのですがどこを調べたら良いのでしょうか

例えばこんな使い方があります
ls = [1, 4, 5, 7, 10, 12, 15]の中から8に一番近い要素を求める場合に
min(ls, key=lambda x: (abs(8 - x), x))で求められます

この(abs(9 - x), x)のタプルの部分が何かを知るにはどこを調べたら良いのでしょうか?
私の想像ではタプルの1番目の値でまずminを選んで同じ値なら2番目の値で選んでいるのだと想像しましたが、想像の域から出ることができません。

minに限らず他の関数でも使えるlambdaの使い方を知るにはどこを調べたらよいでしょうか?

A 回答 (2件)

言語リファレンスはどんな言語でも読みにくいし、


検索システムもシプルなので、簡単には
知りたい情報を取り出すのは難しいでしょう。

最初は入門書やコミュニティに頼った方がいい。

リファレンスはある程度読み込んで
その構成を把握しないと、なかなか使えませんし
初心者を相手にしてません。
    • good
    • 1
この回答へのお礼

確かにそう思います

1つの関数に数個の使用例が載ってるJavaScriptやPHPに比べてPythonは解り難いですし使用されている言葉も初心者には難解な言葉ばかりに感じます

お礼日時:2021/10/04 20:03

○lambda は、名前の無い関数を定義するものです。



通常の関数で考えるなら

def funcNear8(x):
 return (abs(8 - x), x)
min(ls, key=funcNear8)

こんな感じ。


条件毎にいくつも関数を定義することができないような場合に、一時的に使うための関数を定義するのが、lambdaだと言えます。
このため、引数に関数を取るような関数やメソッドに対して使用することができます。


○min(ls, key=lambda x: (abs(8 - x), x)) の場合。

https://docs.python.org/ja/3/library/functions.h …
> key 引数は引数を 1 つ取る順序関数 (list.sort() のもののように) を指定します。

list.sort()
https://docs.python.org/ja/3/library/stdtypes.ht …
> key は一引数をとる関数を指定し、リストのそれぞれの要素から比較キーを取り出すのに使います (例えば、 key=str.lower)。それぞれの項目に対応するキーは一度計算され、ソート処理全体に使われます。

ということで、 lsの各要素について (abs(8 - x), x) のタプルを求め、そのタプルの大小関係を比べ、一番「小さい」値を返す、というのが「min(ls, key=lambda x: (abs(8 - x), x))」です。


タプルの大小は
https://docs.python.org/ja/3/library/stdtypes.ht …
> (完全な詳細は言語リファレンスの 比較 を参照してください。)
https://docs.python.org/ja/3/reference/expressio …
> 組み込みのコレクションどうしの辞書式比較は次のように動作します:

とたどることで確認できます。
    • good
    • 1
この回答へのお礼

詳しく解説いただきありがとうございました

def funcNear8(x):
 return (abs(8 - x), x)

これは分かるんですけどこのタプルで返している1番目と2番目がなんだかよく解らなかったんですよね
これだけ見て理解できる人なんていませんよね

JavaScriptやPHPのCallback関数はもっと簡単でアロー関数にしろ無名関数にしろ関数の中身が明快なのでわかりやすかったのですけど

お礼日時:2021/10/04 20:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!