【问题标题】:Custom sort method in Python is not sorting list properlyPython中的自定义排序方法无法正确排序列表
【发布时间】:2014-02-20 17:21:09
【问题描述】:

我是计算机课的学生,我们必须编写一个包含文件处理和排序的程序。我已经完成了文件处理并写出了我的排序(这是一个简单的排序),但它没有对列表进行排序。我的代码是这样的:

namelist = []
scorelist = []
hs = open("hst.txt", "r")
namelist = hs.read().splitlines()
hss = open("hstscore.txt","r")
for line in hss:
    scorelist.append(int(line))




scorelength = len(scorelist)
for i in range(scorelength):
    for j in range(scorelength + 1):
        if scorelist[i] > scorelist[j]:
            temp = scorelist[i]
            scorelist[i] = scorelist[j]
            scorelist[j] = temp
            return scorelist

我做 Python 的时间不长,所以我知道代码可能效率不高,但我真的不想使用完全不同的方法对其进行排序,而且我们不允许使用 .sort()或 .sorted() 因为我们必须编写自己的排序函数。是不是我做错了什么?

【问题讨论】:

  • 您的 return 声明放错了位置。事实上,你根本不需要 return 语句,除非所有这些代码都包含在方法或函数中
  • 请注意,您已经对分数进行了排序,但没有对名称进行排序 - 这两个列表现在彼此不同步。
  • 由于 ij 没有相对于彼此排序,因此您的交换也不会是。一个简单的改变可以使它成为冒泡排序的工作变体。
  • @MarkRansom 真的吗?你能告诉我吗?
  • 始终确保i 小于j。我可能错了,它是冒泡排序的一种变体。

标签: python list sorting


【解决方案1】:
def super_simple_sort(my_list):
    switched = True
    while switched:
        switched = False
        for i in range(len(my_list)-1):
            if my_list[i] > my_list[i+1]:
               my_list[i],my_list[i+1] = my_list[i+1],my_list[i]
               switched = True

super_simple_sort(some_list)
print some_list

是一个非常简单的排序实现......它与你的等价,但利用一些东西来加速它(我们只需要一个for循环,只要列表无序,我们只需要重复,python 也不需要临时变量来交换值)

因为它改变了你实际上甚至不需要返回的实际数组值

【讨论】:

  • 我实现了您建议的代码,它运行良好,非常感谢!但它将列表排序为 1、2、3、4、5 而不是 5、4、3、2、1。你知道我需要做什么来改变它吗?我试过弄乱它的某些部分,但我似乎无法改变它。你能帮我吗?编辑:忽略这一点,我实际上在发送后不久就设法解决了。但是,非常感谢
猜你喜欢
  • 1970-01-01
  • 2023-02-03
  • 2012-08-04
  • 1970-01-01
  • 2015-02-09
  • 2011-04-27
  • 2016-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多