對不起,我有一個非常基本的python問題。在下面的程序中,我試圖複製一個列表,然後按升序對其進行排序。我寫的代碼是:Python不會理解列表
def lesser_than(thelist):
duplicate = thelist[:]
duplicate = duplicate.sort()
return duplicate
它給了我的錯誤是,它無法排序無類型的東西。有誰知道爲什麼會發生這種情況?
對不起,我有一個非常基本的python問題。在下面的程序中,我試圖複製一個列表,然後按升序對其進行排序。我寫的代碼是:Python不會理解列表
def lesser_than(thelist):
duplicate = thelist[:]
duplicate = duplicate.sort()
return duplicate
它給了我的錯誤是,它無法排序無類型的東西。有誰知道爲什麼會發生這種情況?
list.sort
排序清單並返回None
。這是一個常見的python約定 - 如果操作是就地的,python 通常返回None
。所以,你的代碼應該是:
duplicate = thelist[:]
duplicate.sort() # Note, no assignment
return duplicate
或者,你可以使用sorted
:
return sorted(thelist)
由於sorted
已經返回一個排序的副本,你應該都好(具有支持任意iterables的附帶好處而不是簡單地列出...)
請注意,這裏有一個輕微的命名約定。像sort
,reverse
這樣的動詞通常在適當的時候適當地進行操作 - 動詞sorted
或reversed
進行復制。我不會說這個約定是無處不在的,但它至少與建宏存在...
什麼情況是,sort()
排序列表就地,所以它不會返回一個新的列表。
你能做什麼?
您可以使用sorted()
,它返回一個排序列表:
duplicate = sorted(duplicate)
或者,你可以使操作(duplicate.sort()
),並返回排序列表:
duplicate = thelist[:]
duplicate.sort()
return duplicate
這工作。非常感謝! – user3246935 2014-10-01 05:51:25
關於命名的好處 – mhawke 2014-10-01 05:54:53
@mhawke - 這實際上是我剛剛向我指出的一個小內容。這很有趣...我之前沒有注意到它。 – mgilson 2014-10-01 05:59:12