読者です 読者をやめる 読者になる 読者になる

Psycho-Logic

Psychology, Programming, and occasional Rat.

Python3 DAY9:リストのint型への変換と関数の使い方

Python3
今までストックしてきたpaizaスキルチェックの記事が全部ポシャったので、1からレイアウトやフォーマット(タイトルや構成)を考え直すのにすごく手間取っている今日このごろ。
皆さんいかがお過ごしでしょうか。
 
今回は、
 
「標準入力に半角スペース区切りで渡される3つの数字から、最も大きな値を出力する」
 
というpaizaのスキルチェックの問題で引っかかった部分について、最初に考えたコードを見ながら触れていきます。

 

最初に考えたコード

 
input_lines = input()
walk = input_lines.split(" ")
print(sorted(int(walk[2])))

 

 
2行目から3行目の落差が、杉下茂さんのフォークを思わせます。
 

f:id:Mantra:20170223142440j:plain

 

今回のハイライト 

 
print(sorted(int(walk[2])))
 
これ以外ないですね。
詰め放題で詰め込みすぎて袋がはち切れてしまった主婦の思いです。
これは「sorted()関数とリストの理解不足」が原因の間違いです。
この時の思考としては、
 
「walkリストをint()でint型に変換して、sorted()で昇順にソートして1番大きい数字の来るwalkd[2]をpirntすれば完璧!」
 
と考えていました。
walk[2] としている時点でこれらの処理は [2] に格納されている要素にしか実行されないのですが、それすら気づかず…。
主な(勘違い)ポイントは以下になります。
 
・リストにint()が使用できると思っていた
・関数を入れ子構造にすれば逐次処理してくれると思っていた
・全部書かなくても自分の考えたように動いてくれると思っていた
 
ぐうの音も出ません。
この問題を解決するにあたり、
 
・リストの各要素をint型に変換したいときはmap()メソッドを用いて各要素に繰り返し変換を適用する
・別の変数にsorted()でソートしたリストを入れる
・その変数の [2] をprint()する
 
として対処しました。
sorted()の引数
 
「今までリストをint型にするときどうしてたんだっけ?」
 
と思いましたが、やったことなかったかもしれない…。
 

参考サイト

・[Python] 数字のリストを数値のリストに変換する:http://mukaimame.blog111.fc2.com/blog-entry-525.html
・Python3でのリストのソートについて:http://qiita.com/kitaro_tn/items/7dcd85e610b027b54478