繁体   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