Python排序方法在用户定义的函数内部不起作用

时间:2014-02-05 10:19:48

标签: python python-2.7

任何人都可以告诉我们这段代码有什么问题吗?我需要输出排序列表和反向列表

def sort_num():
    count=1;
    global a
    a=[]
    while count<11:
        no=int(raw_input("no %d:" %count))
        a.append(no)
        count+=1
    print a
    print a.reverse()
    print a.sort()

我的输出是:

[2, 33, 4, 11, 7, 8, 5, 6, 33, 0]
None
None 

4 个答案:

答案 0 :(得分:1)

list.reverselist.sort是正在进行的反转和排序功能。他们返回None。因此,您必须单独打印a,如此

a.reverse()
print a
a.sort()
print a

答案 1 :(得分:1)

另一种选择是调用内置reversed(返回迭代器)和sorted(返回已排序的副本)方法。

print list(reversed(a))
print sorted(a)

答案 2 :(得分:1)

这将为您提供数组的排序版本。

sorted(a, reverse=True)

如果您想就地排序:

a.sort(reverse=True)

答案 3 :(得分:1)

关于为什么list.sort()不返回排序列表的位说明?

在性能很重要的情况下,复制列表只是为了对其进行排序会很浪费。因此,list.sort()会对列表进行排序。

为了提醒您这一事实,它不会返回已排序的列表。这样,当您需要排序副本时,您不会被意外地覆盖列表,但也需要保留未排序的版本。在这种情况下,使用builtin sorted()函数。

sorted()是一个内置函数:

>>> help(sorted)
Help on built-in function sorted in module __builtin__:

sorted(...)
    sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list

>>>

list.sort()是一种列表方法,它将在列表本身上发生变化:

>>> help(list.sort)
Help on method_descriptor:

sort(...)
    L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
    cmp(x, y) -> -1, 0, 1

段:

>>> ls = [3,2,1]
>>> sorted(ls)
[1, 2, 3]
>>> ls
[3, 2, 1]
>>> ls.sort()
>>> ls
[1, 2, 3]
>>>

希望能够清除你的怀疑。