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

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

ただいまの
回答率

90.34%

  • Python 3.x

    7451questions

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

テキストファイルを引数として選択ソートを行うとき

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 171
退会済みユーザー

退会済みユーザー

以前、テキストファイルを引数として、特定の書体で出力するコードについて質問させていただきました。

テキストファイルの例:左から 出席番号、名前、点数

727 Arai 12
1139 Aikawa 77
520 Kumano 100
87 Tanaka 0
2147 Ueda 77
89 Kinoshita 51
#coding:utf-8

import sys

f = open(sys.argv[1], "r")

class Record():
    def __init__(self, num:int, name:str, score:int):
        self.num = num
        self.name = name
        self.score = score

data = []
for row in f:
    num, name, score = row.split()
    num = int(num)
    name = str(name)
    score = int(score)
    data.append(Record(num, name, score))

f.close()    

print("____ソート前____")
def printdata():
    for r in data:
        print("{:4d},{:16s},{:3d}".format(r.num, r.name, r.score))
printdata()


以上のコードに選択ソートを追加して、以下のように点数降順に並び替えたいと思っています。

 520, Kumano     ,100
1139, Aikawa     ,77
2147, Ueda        ,77
  89, Kinoshita    ,51
 727, Arai           ,12
  87, Tanaka       , 0


選択ソートの理論は理解できたのですが、どのように上記のコードに組み込めばいいかがイマイチわかりません。scoreを整列させるためにはどのように考えればよろしいのでしょうか?

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • hayataka2049

    2018/06/09 20:59

    あと、動くコードを掲載してくれませんか・・・(fileのところ)

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2018/06/09 21:01

    失礼いたしました。訂正いたしました。

    キャンセル

  • hayataka2049

    2018/06/09 21:04

    では、自分で選択ソートを実装してみたコードとか載せていただければ、こちらとしてもそれに基づいてアドバイスできます。まずは自分で考えてやってみることです

    キャンセル

回答 1

+2

質問者さんの前提無視してpandasのソートを使って
やりたいことを実現してみました。参考程度に見てください。

import pandas as pd
from StringIO import StringIO

txt = StringIO("""727 Arai 12
1139 Aikawa 77
520 Kumano 100
87 Tanaka 0
2147 Ueda 77
89 Kinoshita 51""")

df = pd.read_csv(txt, sep=" ", names=["id", "name", "score"])
print(df)
"""
    id    name    score
0    727    Arai    12
1    1139    Aikawa    77
2    520    Kumano    100
3    87    Tanaka    0
4    2147    Ueda    77
5    89    Kinoshita    51
"""

print(df.sort_values(by=["score"], ascending=False))
"""

id    name    score
2    520    Kumano    100
1    1139    Aikawa    77
4    2147    Ueda    77
5    89    Kinoshita    51
0    727    Arai    12
3    87    Tanaka    0
"""

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/06/09 21:09

    二度とBAがつかない回答になってしまった・・・

    キャンセル

  • 2018/06/09 21:23

    あれま、なんだかごめんなさい

    キャンセル

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

  • Python 3.x

    7451questions

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