質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

2676閲覧

pythonの問題を解説してほしいです2

oinari03

総合スコア59

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/11/12 14:26

編集2019/11/12 14:46

以下のプログラムを実行した際の出力結果

python

1dive_into_code = [(1, 'Noro'), (2, 'Nakao'), (3, 'Miyaoka'), (4, 'Kimura')] 2dic = dive_into_code 3dic.sort(key=lambda dic: dic[1]) 4 5print(dic)

正解: [(4, 'Kimura'), (3, 'Miyaoka'), (2, 'Nakao'), (1, 'Noro')]

sortが順番を入れ替えるのは分かるのですが、lambdaを使っているのがわかりません。
したがって全くこの結果が受け入れられません。どういう流れでこの答えになるのか?どういった構造なのかを教えてほしいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

quickquip

2019/11/12 14:30

質問が書かれてないですね。
oinari03

2019/11/12 14:36

追記しました。
oinari03

2019/11/12 14:47

タイトルを変更しました。解説していただけると助かります。
guest

回答2

0

sortが順番を入れ替えるのは分かるのですが、lambdaを使っているのがわかりません。

lambdaを使わなければ理解できるのでしょうか。

python

1dive_into_code = [(1, 'Noro'), (2, 'Nakao'), (3, 'Miyaoka'), (4, 'Kimura')] 2dic = dive_into_code 3 4def f(x): 5 return x[1] 6 7dic.sort(key=f) 8print(dic)

これで理解できるのであれば、元のコードと上の書き換えたコードは(ほとんど)等価なコードであるということを把握していただければ結構です。

そうでない場合は、高階関数とか関数オブジェクトについて理解していただいた上で、sortメソッドの仕様を確認する、という段取りで理解するしかないと思います。

高階関数と関数オブジェクトについて

検索すれば出てきます。wikipediaの項目もあります。

https://ja.wikipedia.org/wiki/高階関数
https://ja.wikipedia.org/wiki/関数オブジェクト

list.sortの仕様

下記URL(Pythonの公式のドキュメント)を見てください。
https://docs.python.org/ja/3/library/stdtypes.html#list.sort

投稿2019/11/12 16:20

編集2019/11/12 16:25
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oinari03

2019/11/12 16:25

関数については理解しているようです。高級関数については初めて聞いたので調べて見ようと思います。
oinari03

2019/11/12 16:26

ありがとうございます!!!
guest

0

ベストアンサー

python

1dive_into_code_2 = [(1, 'Den'), (2, 'Bob'), (3, 'Chan'), (4, 'Akira')] 2 3dic2 = dive_into_code_2 4dic2.sort(key=lambda dic2: dic2[1]) 5 6print(dic2)

これを実行してもらうと、Akira Bob Chan Denの順でソートされるはずです。(名前の頭文字がabcでソートされてます。)

sortの引数で名前を指定(dic2[1]のこと)しているからです。

python

1dive_into_code_2 = [(11, 'Den'), (2, 'Bob'), (3, 'Chan'), (4, 'Akira')] 2 3dic2 = dive_into_code_2 4dic2.sort(key=lambda dic2: dic2[0]) #dic2[0]と変更 5 6print(dic2)

これを実行してもらうと、 Bob Chan Akira Denの順でソートされるはずです。(数字順でソートされてます。)

lambdaはかんたんです。 

lambda 入力 : 出力

となっています。

https://qiita.com/nagataaaas/items/531b1fc5ce42a791c7df

要するに

dict.sort(key=lambda x:x[0]) #0番目でソート
dict.sort(key=lambda x:x[1]) #1番目でソート

です。

なぜ、lambdaかというと、自分もsortの詳細な実装は追えていないのですが、sort演算を行う際にその都度、要素のどこをみて並べ替えるのかという値を取得するためにlambdaをもちいているのではないかと思います。

https://qiita.com/yousuke_yamaguchi/items/23014a3c8d8beb8ba073

投稿2019/11/12 15:04

編集2019/11/12 16:54
tatsu57

総合スコア55

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LouiS0616

2019/11/12 15:19

> lambdaの出力値(この場合はdic2[0])がkeyに代入されています。 分かり易くする意図なのかもしれませんが、この一文をそのまま読む分には完全に誤りなので表現を改めた方が良いように思います。
oinari03

2019/11/12 16:12

お二人の話を含めてわかりやすい回答ありがとうございます!!!!!!
tatsu57

2019/11/12 16:56

紛らわしい表現でしたので訂正しました。ご教示ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問