Python无法理解这个列表

Python无法理解这个列表,python,list,sorting,duplicates,Python,List,Sorting,Duplicates,对不起,我有一个非常基本的python问题。在下面的程序中,我试图复制一个列表,然后按升序排序。我写的代码是: def lesser_than(thelist): duplicate = thelist[:] duplicate = duplicate.sort() return duplicate 它给我的错误是它不能对类型为None的东西进行排序。有人知道发生这种情况的原因吗?list.sort对列表进行排序,然后不返回任何结果。这是一种常见的python约定—如

对不起,我有一个非常基本的python问题。在下面的程序中,我试图复制一个列表,然后按升序排序。我写的代码是:

def lesser_than(thelist):

    duplicate = thelist[:]
    duplicate = duplicate.sort()
    return duplicate
它给我的错误是它不能对类型为None的东西进行排序。有人知道发生这种情况的原因吗?

list.sort对列表进行排序,然后不返回任何结果。这是一种常见的python约定—如果操作已就绪,python通常不会返回任何值。因此,您的代码应该是:

duplicate = thelist[:]
duplicate.sort()  # Note, no assignment
return duplicate
或者,您可以使用排序的:

因为sorted已经返回了一个排序副本,所以您应该能够很好地支持任意的iterables,而不仅仅是列表

注意,这里有一个轻微的命名约定。像sort、reverse这样的动词通常在有意义的时候在适当的位置操作——像sorted或reversed这样的动词可以复制。我不会说这个约定是无处不在的,但它确实存在,至少在内置的情况下…

发生的事情是排序将列表排序到位,所以它不会返回新的列表

你能做什么

您可以使用sorted,它返回一个排序列表:

duplicate = sorted(duplicate)
duplicate = thelist[:]
duplicate.sort()
return duplicate
或者,您可以将操作复制。排序并返回已排序的列表:

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

@mhawke-这实际上是我最近刚刚向我指出的一个小新闻。很有趣。。。我以前没注意到。