2014-02-05 47 views
2

任何人都可以請告訴這個代碼有什麼問題嗎?我需要輸出排序列表和反向列表Python排序方法不能在用戶定義的函數內工作

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 
+2

'list.reverse'和'list.sort'就地修改列表並返回None。你需要打印'a'。 –

回答

1

list.reverselist.sort被就地倒車和排序功能。他們返回None。所以,你必須單獨打印a,這樣

a.reverse() 
print a 
a.sort() 
print a 
+0

非常感謝..非常感謝.. – macavity

+0

@macavity不客氣:)請考慮接受這個答案,如果它可以幫助你http://meta.stackexchange.com/a/5235/235416 – thefourtheye

1

另一種方法是調用內置reversed(返回一個迭代器)和sorted(返回一個排序的拷貝)的方法。

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

這會給你一個排序後的數組版本。

sorted(a, reverse=True) 

如果你想就地排序:爲什麼list.sort()不返回排序列表

a.sort(reverse=True) 
1

說明一下?

在績效很重要的情況下,僅僅對清單進行分類就會造成浪費。因此,list.sort()會對列表進行排序。

爲了提醒你這個事實,它不返回排序列表。這樣,當您需要分類副本時,您不會被意外覆蓋列表,但也需要保留未排序的版本。在這種情況下,使用內建的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] 
>>> 

Hope t帽子會清除你的疑惑。

相關問題