2016-05-05 3 views
1

次のようにだから私は.txtファイルを持っている:選択の実装方法リスト内で並べ替えますか?

131,263.07 
47,170.14 
170,190.01 
180,412.69 
53,401.53 

をそして私のようなリストを出力するように、ファイルを読むために持っていた:

131 kms, $263.07 
47 kms, $170.14 
170 kms, $190.01 
180 kms, $412.69 
53 kms, $401.53 

私が使用したコードはでした:

def PrintList(table): 
    for line in table: 
     print(str(line[0]) + " kms, $" + str(line[1])) 

file = open(input("Enter file name: ")) 

table = [] 
for line in file: 
    line = line.rstrip().split(",") 
    line[0] = int(line[0]) 
    line[1] = float(line[1]) 
    table.append(line) 

PrintList(table) 

file.close() 

そして今、私は得ることが価格の昇順でリストをソートしたいと思います:

47 kms, $170.14 
170 kms, $190.01 
131 kms, $263.07 
53 kms, $401.53 
180 kms, $412.69 

私はこれをPythonでどのように実装しますか?私はSelection Sortを使ってこれを試みましたが、うまく動作していないようです。

更新:これまでの入力をありがとう。しかし、ソート関数を試しましたが、これを実装する方法を理解したいと思います。Selection Sort

アップデート:私はそれにもかかわらず下記の私はそれを上書きしてきたように、私が使用しているSelection Sortコードを投稿することができませんは、コードの例(私は距離のランダムなリストをソートするために使用されている)であるI前述のリストを価格の高い順に並べ替えるために修正しなければならなかった。それが十分であることを願っています。

def selectionSort(distance): 
    n = len(distance) 
    for i in range(n): 
     minPlace = searchMin(distance) 
     swap(distance, i, minPlace+i) 

def searchMin(distance): 
    minPlace = 0 
    n = len(distance) 
    for i in range(1, n): 
     if distance[i] < distance[minPlace]: 
      minPlace = i 
     return minPlace 

def swap(distance, i, j): 
    temp = distance[i] 
    distance[i] = distance[j] 
    distance[j] = temp 

これを実装する簡単な方法がある場合、私に知らせてください。前もって感謝します。乾杯。

+0

ソート機能を使用しましたか? – trans1st0r

+0

はい、あります。しかし、私は選択ソートを使用してそれを実装する方法を理解したいと思います。 – Raux

+0

あなたが得ているすべての答えは、「ここではPythonをあなたのために並べ替える方法です」ですが、動作しなかったソートアルゴリズムの助けが必要ですか? –

答えて

1

Pythonのリストはすでにsort方法が付属しています。 key引数を指定して呼び出すだけで、並べ替え方法を決定できます。

def print_list(table): 
    for line in table: 
     print(str(line[0]) + " kms, $" + str(line[1])) 

with open(input("Enter file name: ")) as f: 
    table = [] 
    for line in f: 
     line = line.rstrip().split(",") 
     line[0] = int(line[0]) 
     line[1] = float(line[1]) 
     table.append(line) 

    table.sort(key=lambda line: line[1]) 
    print_list(table) 

私は、ファイルが自動的に閉じますように、すなわちPEP8に従ってがprintlistの名前を変更し、with statementを使用して、あなたのプログラムに追加の変更のカップルを作っ注意。

選択ソート(Pythonのデフォルトのソートよりも悪い)を使用する場合は、sortedのインターフェイスを満たすヘルパー関数で実装します。

+0

関数の命名規則については、PEP 8の[特定のセクション](https://www.python.org/dev/peps/pep-0008/#function-names)にリンクしてください。 –

+0

@ TadhgMcDonald-Jensenヒントをありがとう!編集されました。将来、リンクを明確にしている場合は、投稿を編集してください。良い一日を! – phihag

0

選択ソートを実装することは絶対に必要ですか?私はsortedとなるだろう:

key = lambda x: x[1] 

は、あなたのオブジェクトを比較するために、インデックス1(価格)と要素の値を使用するように指示しsorted

PrintList(sorted(table, key = lambda x: x[1])) 

。あなたのforループの後

+0

ええ、それは選択ソートでどのように動作するか見たいと思います。 – Raux

0

sorted_table = sorted(table, key=lambda row: row[1], reverse=True) 

Sorted_tableは今、第二列でソート、あなたの表形式のデータが含まれています。 sorted_tableをPrintList関数に渡すことができます。ラムダ回避の代替:pythonの並べ替えの詳細について

from operator import itemgetter 
sorted_table = sorted(table, key=itemgetter(1), reverse=True) 

は、以下を参照してください。https://wiki.python.org/moin/HowTo/Sorting

+0

'reverse = True'を追加すると、リストが降順でソートされると思います。 – VHarisop

+0

'list.sort()'を使うと、新しいリストを作るのではなく、その場所でソートすることができます。 –

関連する問題