Python中自定义排序函数的结果不正确

时间:2012-03-26 00:05:08

标签: python list sorting

我创建了一个排序函数,用于排序整数列表,从最高到最低。 这是代码:

def sort(list):
    s = []
    dropnum = 0
    l = len(list) - 1
    counter = 0
    s.append(list[0])
    while 1:
        maximum = len(s)
        if counter == l:
            break
        if list[counter] < s[dropnum]:
            dropnum = dropnum + 1
        else:
            counter = counter + 1
            if dropnum >= maximum:
                a.append(list[counter])
            else:
                s.insert(dropnum, list[counter])
            dropnum = 0
    return s
print sort([70,9,24,82,102])

我应该得到输出:

[102,82,70,24,9]

但我明白了:

[102, 82, 24, 9, 70]

2 个答案:

答案 0 :(得分:1)

我相信你已经知道了,python的内置sorted()是一种更有效的排序方式。

print sorted([70,9,24,82,102], reverse=True)

假设这是一个学习练习,我认为这就是你想要做的事情

def sort(lst):
    s = []
    for item in lst:
        dropnum = 0
        while dropnum < len(s) and s[dropnum] > item:
            dropnum += 1
        s.insert(dropnum, item)
    return s
print sort([70,9,24,82,102])

如果以通常的Python方式遍历列表

,则根本不需要该计数器变量
for item in lst:    # loop through the items in the input

答案 1 :(得分:0)

你有一些内置于python的简单选项:

list.sort(...)  # in-place, more memory efficient

sorted(my_iterable, ...)  # returns a new copy

两者都可以选择使用布尔reverse标志,自定义cmp比较函数和key来定义要排序的成员

我相信这两者都在内部使用了快速排序实现的变体(对于大型集合,对于较小的集合使用更简单的迭代算法)。对于python版本2.3+,保证排序稳定。

此外,您不应将名称与内置函数或类型(例如list)命名的参数或变量命名,因为您污染了当前范围中的命名空间。