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

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

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

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

Q&A

解決済

3回答

347閲覧

pythonで数を並び替える上での疑問.

daisuke_factex

総合スコア42

Python 3.x

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

0グッド

0クリップ

投稿2018/03/17 05:01

こんにちは, いつもお世話になっております.

さて競技プログラムの練習問題で「数の並び替え」というものがあり,

python

1#入力 25 #数字の個数 31 43 59 64 77

という入力があった場合に出力として,

python

1#出力 21 33 44 57 69

とするようなプログラムを行いたいです.
そこでまずリストを作り, 数字を追加していき, sort関数で並び替えて, 出力しようとしています.
しかし, リストを作ったのはいいものの""で囲まれてしまい, sortがうまく機能しません.

実際に行ったコード

python

1count = input().rstrip() 2list =[] 3 4for i in range(int(count)): 5add = input().rstrip() 6list = list + [add] 7 8print(list) #->['3', '5', '19', '1', '2']と出力 9list_ = list.sort() 10print(list_) #->Noneと出力

自分のリストの作り方は誤っているのでしょうか・・・?
ご教授お願いします.

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

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

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

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

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

guest

回答3

0

ベストアンサー

問題は二点です。

数値ではなく文字列として各値を扱ってしまっていること
この場合基本的に辞書順にソートされるので、例えば9より19が先に来ます。
入力時に数値に変換しておくのが一般的です。

Python

1count = int(input().rstrip()) 2input_list = [] 3 4for i in range(count): 5 add = int(input().rstrip()) 6 input_list = input_list + [add]

ソートの仕方を誤っていること
list.sortインプレースなソートです。
リスト自体を破壊的に変更する一方で、何か値を返すことはありません。

組み込み関数sortedを使うか、list.sortの返り値を受け取らないようにしてください。

Python

1input_list = sorted(input_list)

あるいは

Python

1input_list.sort()

書いてみた

参考までに。 Wandbox

Python

1count = int(input()) 2input_list = [ 3 int(input()) for _ in range(count) 4] 5 6print(*sorted(input_list), sep='\n')

listという変数名は、Pythonの組み込みの名前を覆い隠してしまいます(シャドウイング)。
分かりづらいエラーの原因になりますので、使わないようにした方がいいです。

なお、同じように使ってはいけない名前として max id str len などがあります。

投稿2018/03/17 05:35

編集2018/03/17 05:39
LouiS0616

総合スコア35658

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

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

daisuke_factex

2018/03/18 05:09

読み込む際の型の件とsortの仕組みの件に加えて, シャドウイングという件もご指摘頂きありがとうございます(inputという変数でも同じような事をしたことがあります, 成長してない...).
guest

0

count をつかうときに int(count) して整数にしますよね。
配列にいれるときも同じようにして整数にしてあげる必要があります。

python

1count = input().rstrip() 2nums = [] 3for i in range(int(count)): 4 data = input().rstrip() 5 nums.append(int(data)) 6 7print(nums) 8nums.sort() 9print(nums)

投稿2018/03/17 06:42

katoy

総合スコア22324

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

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

daisuke_factex

2018/03/18 05:09

文字列が問題だったのですね! ご指摘ありがとうございます.
guest

0

add = input().rstrip()

これは文字列を返してますんで、list は文字列の配列になります
数字にしたいなら、ここで数字に変換する必要がありますねー

投稿2018/03/17 05:14

y_waiwai

総合スコア87719

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

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

daisuke_factex

2018/03/18 05:06

読み込むものはほとんど文字列になってくるのですね, ここまで頭が回りませんでした. ご指摘ありがとうございます!
y_waiwai

2018/03/18 05:12

ニンゲンが入れるもの、ニンゲンに見せるもの、みんな文字列、ということですね。 数値やデータ構造を入れたり見たりする能力がないので困ったものですねw
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問