【问题标题】:Python 2.7 Bubble SortPython 2.7 冒泡排序
【发布时间】:2017-07-29 07:46:40
【问题描述】:

我正在尝试让我的程序对 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 中实现排序,所以任何帮助都会很棒,谢谢。

【问题讨论】:

  • 您需要将值从字符串转换为整数。当您比较字符串时,您是按字典顺序(即按字母顺序)比较它们,而不是按数字比较。所以100 出现在9 之前,因为91“大”
  • 你能告诉我怎么做吗?我对 Python 还是很陌生,谢谢。

标签: python python-2.7 sorting csv


【解决方案1】:

您正在比较字符串而不是整数。使用int(scores[i]) 将字符串转换为整数。

经过进一步检查,您似乎将号码存储在列表中。在这种情况下,要访问第一个数字,我们必须使用scores[0][0],第二个数字将是scores[1][0],依此类推……第一个索引以1 为增量递增,因此我们可以使用int(scores[i][0]

第二个数字保持为 0,因为看起来您只在内部列表中存储了一个 int。

【讨论】:

  • 你能告诉我在哪里实施吗?调试说“int() 参数必须是字符串或数字,而不是'list'”
  • @HarryBeggs 好吧,看来您将数字存储在 int 列表列表中,以访问第一个元素 do int(scores[0][0])
【解决方案2】:

您似乎在分数列表中使用字符串。如果您希望这种排序正常工作,您需要将您的值转换为整数:

 int(str_num)

str_num 是您的字符串值。

完成此转换后,这种排序应该可以正常工作。 此外,您可以使用内置的 timsort 通过调用对您的数字进行排序

scores.sort()

那么您就不必担心实现自己的算法了。

【讨论】:

  • 我将在哪里实现那行代码?它会在“scores = list(r)”行之后吗?
  • 您必须访问字符串列表的每个元素并将它们单独转换为 int 并存储在新列表中。看我的回答。
【解决方案3】:

你可以试试这个:

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))

【讨论】:

    【解决方案4】:
    scores= list(r);
    intscores = [0]*scores.len()
    for str in scores:
        intscores.append(int(str))
    
    intscores.sort()
    

    应该这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 2013-12-02
      • 2019-06-20
      相关资源
      最近更新 更多