2014-10-01 68 views
0

對不起,我有一個非常基本的python問題。在下面的程序中,我試圖複製一個列表,然後按升序對其進行排序。我寫的代碼是:Python不會理解列表

def lesser_than(thelist): 

    duplicate = thelist[:] 
    duplicate = duplicate.sort() 
    return duplicate 

它給了我的錯誤是,它無法排序無類型的東西。有誰知道爲什麼會發生這種情況?

回答

5

list.sort排序清單並返回None。這是一個常見的python約定 - 如果操作是就地的,python 通常返回None。所以,你的代碼應該是:

duplicate = thelist[:] 
duplicate.sort() # Note, no assignment 
return duplicate 

或者,你可以使用sorted

return sorted(thelist) 

由於sorted已經返回一個排序的副本,你應該都好(具有支持任意iterables的附帶好處而不是簡單地列出...)

請注意,這裏有一個輕微的命名約定。像sortreverse這樣的動詞通常在適當的時候適當地進行操作 - 動詞sortedreversed進行復制。我不會說這個約定是無處不在的,但它至少與建宏存在...

+0

這工作。非常感謝! – user3246935 2014-10-01 05:51:25

+0

關於命名的好處 – mhawke 2014-10-01 05:54:53

+0

@mhawke - 這實際上是我剛剛向我指出的一個小內容。這很有趣...我之前沒有注意到它。 – mgilson 2014-10-01 05:59:12

2

什麼情況是,sort()排序列表就地,所以它不會返回一個新的列表。

你能做什麼?

  • 您可以使用sorted(),它返回一個排序列表:

    duplicate = sorted(duplicate) 
    
  • 或者,你可以使操作(duplicate.sort()),並返回排序列表:

    duplicate = thelist[:] 
    duplicate.sort() 
    return duplicate