为什么“return list.sort()”返回None,不是列表?

我已经能够validationfindUniqueWords确实导致sortinglist 。 但是,它不return list ,为什么?

 def findUniqueWords(theList): newList = [] words = [] # Read a line at a time for item in theList: # Remove any punctuation from the line cleaned = cleanUp(item) # Split the line into separate words words = cleaned.split() # Evaluate each word for word in words: # Count each unique word if word not in newList: newList.append(word) answer = newList.sort() return answer 

list.sort对列表进行sorting,即不返回新的列表。 只要写

 newList.sort() return newList 

问题在这里:

 answer = newList.sort() 

sort不会返回sorting列表; 相反,它把这个列表sorting。

使用:

 answer = sorted(newList) 

这是来自python开发人员列表中的Guido van Rossum的一封电子邮件,说明为什么他select不在影响对象的操作上返回self ,并且不返回新对象。

这来自一种编码风格(在其他各种语言中很stream行,我相信尤其是Lisp狂欢),在这种情况下,单个对象的一系列副作用可以像这样链接:

  x.compress().chop(y).sort(z) 

这将是相同的

  x.compress() x.chop(y) x.sort(z) 

我发现链接forms是可读性的威胁; 它要求读者必须熟悉每一种方法。 第二种forms清楚地表明,每一个调用都作用于同一个对象,所以即使你不太了解这个类和它的方法,你也可以理解第二个和第三个调用被应用到x所有的电话都是为了他们的副作用),而不是别的。

我想保留链接返回新值的操作,如string处理操作:

  y = x.rstrip("\n").split(":").lower() 

Python习惯性地从函数和变异数据的方法(如list.sortlist.appendrandom.shuffle返回Nonelist.append是它暗示它是变异的。

如果你想获得一个迭代并返回一个新的,sorting的项目列表,使用sorted内置函数。

Python有两种sorting方法 :一种sorting方法 (或“成员函数”)和一个sorting函数 。 sorting方法对名为对象的内容进行操作 – 将其视为对象正在对其自身进行重新sorting所采取的操作 。 sorting函数是对由对象表示的数据操作,并以sorting顺序返回具有相同内容的新对象。

给定一个名为l的整数列表,如果我们调用l.sort() ,列表本身将被重新sorting:

 >>> l = [1, 5, 2341, 467, 213, 123] >>> l.sort() >>> l [1, 5, 123, 213, 467, 2341] 

这个方法没有返回值。 但是如果我们试图分配l.sort()的结果呢?

 >>> l = [1, 5, 2341, 467, 213, 123] >>> r = l.sort() >>> print(r) None 

现在等于实际上什么都不是 这是程序员在离开Python一段时间后可能会忘记的那些奇怪的,有些烦人的细节之一(这就是为什么我写这个,所以不会再忘记)。

另一方面, sorted()函数不会对l的内容做任何事情,但会返回一个新的sorting列表,其内容与l相同:

 >>> l = [1, 5, 2341, 467, 213, 123] >>> r = sorted(l) >>> l [1, 5, 2341, 467, 213, 123] >>> r [1, 5, 123, 213, 467, 2341] 

请注意,返回的值不是 深层副本 ,因此请谨慎对待包含在列表中的元素的副作用操作:

 >>> spam = [8, 2, 4, 7] >>> eggs = [3, 1, 4, 5] >>> l = [spam, eggs] >>> r = sorted(l) >>> l [[8, 2, 4, 7], [3, 1, 4, 5]] >>> r [[3, 1, 4, 5], [8, 2, 4, 7]] >>> spam.sort() >>> eggs.sort() >>> l [[2, 4, 7, 8], [1, 3, 4, 5]] >>> r [[1, 3, 4, 5], [2, 4, 7, 8]] 

请重新阅读Python sort函数的文档,集中讨论它的返回值。