2014-10-01 114 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