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

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

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

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

Q&A

解決済

1回答

692閲覧

Pythonの練習問題のソースコードを理解したい

wakkan611

総合スコア1

Python 3.x

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

0グッド

0クリップ

投稿2023/03/20 05:22

編集2023/03/20 07:10

実現したいこと

ソースコードを理解する

前提

paizaというwebサイトでpythonを勉強しています。
練習問題をやっていて分からなかったのでネットにあった他の方のソースコードを見たのですが、
疑問が出てきてネットで調べましたが分からなかったため質問させていただきます。
私自身の調べ、理解不足でしたら申し訳ありません。

・4行目のsplit()は入力値をスペースで分けてリスト化するんですよね?なぜmap()の上からlist()でくくってるのでしょうか?
・6行目のlambda式のvalというのは任意で決めた引数で:の後は式を入れるということは分かりましたが、val[1]とはvalというリストの1番目ということでしょうか?そのリストはどこにあるのでしょうか?

問題文
正整数 n が与えられ、数のペアが n 個与えられます。各ペアの最初の数はりんごの個数を、その次の数はバナナの個数を表しています。これらの数のペアを以下の規則に従って、偉い順に並び替えてください。

  1. ふたつのペアのりんごの数が異なる場合、りんごの数が多い方が偉い(この際、バナナの数は関係ない)。
  2. りんごの数が同じである場合、バナナの数が多い方が偉い。

入力
2
1 3
2 2

出力
2 2
1 3

該当のソースコード

Python

1n = int(input()) 2lis = [] 3for i in range(n): 4 num = list(map(int, input().strip().split())) 5 lis.append(num) 6sortSecond = lambda val: val[1] 7lis.sort(reverse = True, key = sortSecond) 8lis.sort(reverse = True) 9for i in range(n): 10 print(*lis[i])

試したこと

参考にした資料
https://note.nkmk.me/python-lambda-usage/
調べてみましたがいまいちよく分からず、、、

補足情報(FW/ツールのバージョンなど)

該当の問題
https://paiza.jp/works/mondai/c_rank_level_up_problems/c_rank_sort_step3/edit?language_uid=python3

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

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

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

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

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

guest

回答1

0

ベストアンサー

ほとんどの質問が、やってみたらわかることのように思います。

map()の上からlist()でくくってるのでしょうか?

map()はイテレータ(iterator)を返します。 イテレータは未計算のオブジェクトで、forなどで繰り返し呼び出すと、目的のリストの要素を返すオブジェクトです。 必要な時だけ計算することで無駄な計算をすることを省ける場合があるのでこのような仕様になっています。
list()でくくってやることで、イテレータから実際の要素を計算してリスト化することができます。

val[1]とはvalというリストの1番目

リストのインデックスは0始まりなので、1番目はインデックス0ですね。なので val[1]は2番目というのが正しいかな。 もし、最初を0番目だと思っているのであれば、あっています。

そのリストはどこにある

valはlambda式の仮引数なので渡された引数です。
以下の場所で使われていますが、
lis.sort(reverse = True, key = sortSecond)
この時、lisはリストのリストですから、lambdaに渡されるのはlisの要素であるリストです。

投稿2023/03/20 05:45

編集2023/03/20 07:36
TakaiY

総合スコア12765

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

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

wakkan611

2023/03/20 07:33

ご回答ありがとうございます。理解できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問