簡體   English   中英

Python 2.7氣泡排序

[英]Python 2.7 Bubble Sort

我試圖使我的程序對csv文件中記錄的分數進行排序,我的過程是將csv文件讀入列表,對列表進行冒泡排序,然后用新列表覆蓋csv文件。 但是,我的代碼遇到了邏輯錯誤。 當我對列表進行排序時,結果為[[], ['190'], ['200'], ['250'], ['350'], ['90']]

如果有人可以幫助,將不勝感激。 這是我的代碼以供閱讀和氣泡排序。

import csv

def bubbleSort(scores):
    for length in range(len(scores)-1,0,-1):
        for i in range(length):
            if scores[i]>scores[i+1]:
                temp = scores[i]
                scores[i] = scores[i+1]
                scores[i+1] = temp


with open ("rec_Scores.csv", "rb") as csvfile:
    r = csv.reader(csvfile)
    scores = list(r)

bubbleSort(scores)
print(scores)

這是我第一次在python中實現排序,因此任何幫助都將非常感謝。

看來您在分數列表中使用的是字符串。 如果您希望這種排序正常工作,則需要將值轉換為整數:

 int(str_num)

其中str_num是您的字符串值。

完成這種轉換后,這種排序應該可以正常工作。 另外,您可以使用內置的音序器通過以下方式對電話號碼進行排序

scores.sort()

然后,您不必擔心實現自己的算法。

您正在比較字符串而不是整數。 使用int(scores[i])將字符串轉換為整數。

經過進一步檢查,您似乎將數字存儲在列表中。 在這種情況下,要訪問第一個數字,我們必須執行scores[0][0] ,第二個數字將是scores[1][0] ,依此類推...第一個索引以一個增量遞增,因此我們可以使用int(scores[i][0]

第二個數字保持為0,因為看起來您只在內部列表中存儲了一個整數。

您可以嘗試以下方法:

import csv
with open ("rec_Scores.csv", "rb") as csvfile:
    r = csv.reader(csvfile)
    scores = [int(item) for item in list(r)]
print(sorted(scores))
scores= list(r);
intscores = [0]*scores.len()
for str in scores:
    intscores.append(int(str))

intscores.sort()

這應該做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM