我已经验证findUniqueWords
确实导致排序list
。但是,它不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
答案 0 :(得分:119)
list.sort
对列表进行排序,即它不返回新列表。只需写下
newList.sort()
return newList
答案 1 :(得分:105)
问题在于:
answer = newList.sort()
sort
不会返回排序列表;相反,它对列表进行了排序。
使用:
answer = sorted(newList)
答案 2 :(得分:53)
Here是来自Guido van Rossum的电子邮件,在python的开发列表中解释了为什么他选择不返回self
影响对象的操作而不返回新对象。
这来自编码风格(在各种其他语言中流行,我 相信特别是Lisp狂热其中的一系列副作用 在单个对象上可以链接如下:
x.compress().chop(y).sort(z)
与
相同x.compress() x.chop(y) x.sort(z)
我发现链接形式对可读性构成威胁;它需要的 读者必须非常熟悉每种方法。该 第二种形式清楚地表明这些调用中的每一个都是相同的 对象,所以即使你不了解类及其方法 好吧,你可以理解第二次和第三次调用都适用于 x(并且所有调用都是针对它们的副作用而制作的),而不是 别的什么。
我想为返回新值的操作保留链接, 像字符串处理操作:
y = x.rstrip("\n").split(":").lower()
答案 3 :(得分:13)
Python有两种排序:排序方法(或"成员函数")和排序函数。 sort方法对名为的对象的内容进行操作 - 将其视为对象正在重新排序的动作。 sort函数是对由对象表示的数据的操作,并按排序顺序返回具有相同内容的新对象。
给定一个名为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
相同:< / p>
>>> l = [1, 5, 2341, 467, 213, 123]
>>> r = sorted(l)
>>> l
[1, 5, 2341, 467, 213, 123]
>>> r
[1, 5, 123, 213, 467, 2341]
请注意,返回的值不是 a deep copy,因此请务必谨慎对列表中包含的元素进行副作用操作:
>>> 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]]
答案 4 :(得分:12)
Python习惯性地从改变数据的函数和方法返回None
,例如list.sort
,list.append
和random.shuffle
,其想法是提示事实上,它正在变异。
如果你想获取一个iterable并返回一个新的,已排序的项目列表,请使用sorted
内置函数。
答案 5 :(得分:3)
要了解为什么它不返回列表:
sort()不会返回任何值。
sort()方法仅按给定列表的元素以特定顺序排序-升序或降序,而不返回任何值。
answer = newList.sort()
出现问题了,答案是没有。
相反,您只能执行return newList.sort()
sort()方法的语法为:
list.sort(key=..., reverse=...)
或者,您也可以出于相同目的使用Python的内置函数sorted()。
sorted(list, key=..., reverse=...)
注意:sort()和sorted()之间最简单的区别是:sort()不返回任何值,而sorted()返回可迭代的列表。
所以您的情况answer = sorted(newList)
答案 6 :(得分:0)
如果要返回排序列表,可以使用sorted()方法。 更方便。
l1 = []
n = int(input())
for i in range(n):
user = int(input())
l1.append(user)
sorted(l1,reverse=True)
list.sort()方法就地修改列表并返回None。
如果您仍然想使用排序,则可以执行此操作。
l1 = []
n = int(input())
for i in range(n):
user = int(input())
l1.append(user)
l1.sort(reverse=True)
print(l1)