为什么“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.sort
, list.append
和random.shuffle
返回None
, list.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
函数的文档,集中讨论它的返回值。