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

我已经能够验证findUniqueWords确实导致排序的list。但是,它不returnlist,为什么?为什么“return list.sort()”返回None,而不是列表?

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就地对列表进行排序,即它不返回新列表。只要写

newList.sort() 

return newList

回答:

请重新阅读了Python sort函数的文档,专注于它的返回值。

回答:

的问题是在这里:

answer = newList.sort() 

sort不返回排序列表;相反,它将这个列表排序。

用途:

answer = sorted(newList) 

回答:

的Python习惯性地返回None从功能和变异数据的方法,如list.sortlist.appendrandom.shuffle,与想法是,它暗示一个事实,即它是变异。

如果您想获取迭代并返回其项目的新排序列表,请使用sorted内置函数。

回答:

Here是吉多·范罗苏姆在Python的开发列表explainig为什么他选择不上,影响该对象并不会返回一个新的操作返回self的电子邮件。

这来自一种编码风格(在其他各种语言的流行,我 相信尤其是Lisp的陶醉在其中),其中单个对象的一系列副作用 可以链接如下:

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

这将是相同的

x.compress() 

x.chop(y)

x.sort(z)

我找到链接形成可读性的威胁;它要求读者必须非常熟悉每种方法。 第二种形式清楚地表明,这些呼叫中的每一个都作用于同一个对象,所以即使您不知道该类及其方法非常好,您也可以理解第二次和第三次呼叫适用于 x(并且所有呼叫都是为了他们的副作用),而不是 。

我想预订链接用于返回新值, 像字符串处理操作的操作:

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

回答:

的Python有两种各种各样的:一种方法(或“成员函数“)和函数。排序方法对名为对象的内容进行操作 - 将其视为该对象正在采取的操作来重新排序。排序功能是对由对象表示的数据执行的操作,并以排序顺序返回具有相同内容的新对象。

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

>>> 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

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

功能sorted(),而另一方面,也不会做任何的l内容,但会返回一个新的,分类具有相同的内容列表,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]

注意,返回值是不一个deep copy,所以要谨慎在包含在列表中照常内的元件侧effecty操作:

>>> 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]]

以上是 为什么“return list.sort()”返回None,而不是列表? 的全部内容, 来源链接: utcz.com/qa/258995.html

回到顶部