初心者向けと言われ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の使い方を知るにはどこを調べたらよいでしょうか?
No.2ベストアンサー
- 回答日時:
言語リファレンスはどんな言語でも読みにくいし、
検索システムもシプルなので、簡単には
知りたい情報を取り出すのは難しいでしょう。
最初は入門書やコミュニティに頼った方がいい。
リファレンスはある程度読み込んで
その構成を把握しないと、なかなか使えませんし
初心者を相手にしてません。
確かにそう思います
1つの関数に数個の使用例が載ってるJavaScriptやPHPに比べてPythonは解り難いですし使用されている言葉も初心者には難解な言葉ばかりに感じます
No.1
- 回答日時:
○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 …
> 組み込みのコレクションどうしの辞書式比較は次のように動作します:
とたどることで確認できます。
詳しく解説いただきありがとうございました
def funcNear8(x):
return (abs(8 - x), x)
これは分かるんですけどこのタプルで返している1番目と2番目がなんだかよく解らなかったんですよね
これだけ見て理解できる人なんていませんよね
JavaScriptやPHPのCallback関数はもっと簡単でアロー関数にしろ無名関数にしろ関数の中身が明快なのでわかりやすかったのですけど
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java Java 南京錠 2 2023/02/04 11:46
- その他(プログラミング・Web制作) pythonにおける単方向リストの実装について 4 2022/07/13 12:34
- 数学 2*2の行列に対して固有値の最大実部を与えるkの値を求めたい 3 2022/11/08 16:26
- その他(社会・学校・職場) 誰か聞いてください。 社会人6年目ですが、私はポンコツすぎますか? 上司にとあるAファイルの数式を全 1 2023/08/10 18:25
- 高校 変数の置き換えと範囲の確認につきまして 1 2022/05/21 14:31
- 数学 関数の極限の証明問題 4 2022/06/30 10:02
- 工学 Pythonの3Dグラフ表示に関する質問です。 1 2022/12/06 15:03
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- Excel(エクセル) Excelについて質問があります。 関数の数値入力についてなのですが、 b1にー c1に数値 がある 2 2023/05/28 12:30
- スピーカー・コンポ・ステレオ レコードのマトリクス番号の見方を教えてください。 最近レコードの知識が少しずつ増え、最近マトリクス番 1 2022/08/14 13:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c言語
-
H8マイコン C言語でのプロ...
-
繰り返し1行~28行までを順順に...
-
エクセルで特定の列が0表示の場...
-
配列数式の解除
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
-
マクロで"#N/A"のエラー行を削...
-
EXCELのVBAでRange("A1:C4")を...
-
ExcelVBAでPDFを閉じるソース
-
2つのマクロでチェックボックス...
-
エクセルのマクロについて教え...
-
VBA【dictionary勉強中ですが・...
-
配列でデータが入っている要素...
-
教えて下さい
-
TERA TERMを隠す方法
-
2つ以上の変数を比較して最大数...
-
String""から型'Double'への変...
-
Excel マクロ VBA プロシー...
-
UserForm1.Showでエラーになり...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語
-
繰り返し1行~28行までを順順に...
-
!(否定)演算子について
-
H8マイコン C言語でのプロ...
-
MATLABにおける行の挿入方法
-
五目並べ
-
パイソンのプログラミングにつ...
-
if文について教えてください
-
C言語で余りがマイナスになる場合
-
Scilabで行列をグラフ化したい...
-
フォートランで行列の計算
-
Numpyのrandom.multivariate_no...
-
アセンブラの間接アドレッシング
-
C言語で行列表現
-
収束計算
-
ダイナミックプログラミング
-
MATLABのfor文の使い方について
-
OPENCVを使ったエピポーラ幾何...
-
cのプログラミングで虚数を含...
-
≪C言語≫キー入力の判断について
おすすめ情報