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

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

ただいまの
回答率

90.35%

  • Python 3.x

    11195questions

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

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

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 400

daisuke_factex

score 33

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

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

#入力
5 #数字の個数
1
3
9
4
7

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

#出力
1
3
4
7
9


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

 実際に行ったコード

count = input().rstrip()
list =[]

for i in range(int(count)):
add = input().rstrip()
list = list + [add]

print(list)   #->['3', '5', '19', '1', '2']と出力
list_ = list.sort()
print(list_) #->Noneと出力

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+5

問題は二点です。

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

count = int(input().rstrip())
input_list = []

for i in range(count):
    add = int(input().rstrip())
    input_list = input_list + [add]

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

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

input_list = sorted(input_list)

あるいは

input_list.sort()

書いてみた

参考までに。 Wandbox

count = int(input())
input_list = [
    int(input()) for _ in range(count)
]

print(*sorted(input_list), sep='\n')

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/18 14:09

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

    キャンセル

+1

add = input().rstrip()

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/18 14:06

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

    キャンセル

  • 2018/03/18 14:12

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

    キャンセル

+1

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

count = input().rstrip()
nums = []
for i in range(int(count)):
    data = input().rstrip()
    nums.append(int(data))

print(nums)
nums.sort()
print(nums)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/18 14:09

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

    キャンセル

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

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Python 3.x

    11195questions

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