Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “为什么?”;return list.sort();返回None,而不是列表?_Python_List_Sorting_Return - Fatal编程技术网

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

Python “为什么?”;return list.sort();返回None,而不是列表?,python,list,sorting,return,Python,List,Sorting,Return,我已经能够验证findUniqueWords是否会生成排序的列表。但是,它不会返回列表。为什么? def findUniqueWords(theList): newList = [] words = [] # Read a line at a time for item in theList: # Remove any punctuation from the line cleaned = cleanUp(item)

我已经能够验证
findUniqueWords
是否会生成排序的
列表。但是,它不会返回列表。为什么?

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
问题在于:

answer = newList.sort()
sort
不返回已排序的列表;相反,它对列表进行了适当的排序

使用:


Python习惯性地从变异数据的函数和方法返回
None
,例如
list.sort
list.append
、和
random.shuffle
,其思想是暗示它正在变异

如果您想获取一个iterable并返回一个新的、已排序的项列表,请使用
已排序的
内置函数。

来自Python的开发列表中的Guido van Rossum,解释了为什么他在影响对象的操作上选择不返回
self
,而不返回新的

这源于一种编码风格(在各种其他语言中流行,I 特别是相信Lisp对它着迷)在那里有一系列的副作用 在单个对象上,可以按如下方式链接:

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

  x.compress()
  x.chop(y)
  x.sort(z)
我发现链接形式对可读性构成威胁;它要求 读者必须非常熟悉每种方法。这个 第二种形式表明,这些调用中的每一个都作用于同一个对象 对象,因此即使您不太了解该类及其方法 您可以理解,第二个和第三个调用适用于 x(所有的呼吁都是针对它们的副作用),而不是 还有别的

我想为返回新值的操作保留链接, 与字符串处理操作类似:

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

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

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

此方法没有返回值。但是如果我们尝试分配
l.sort()的结果会怎么样呢

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]
请注意,返回的值不是a,因此与往常一样,对列表中包含的元素的副作用操作要小心:

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

要了解它为什么不返回列表,请执行以下操作:

sort()不返回任何值,而sort()方法只按特定顺序(升序或降序)对给定列表的元素进行排序,而不返回任何值

所以问题在于答案为none的
answer=newList.sort()

相反,您只需执行
返回newList.sort()

sort()方法的语法为:

list.sort(key=..., reverse=...)
或者,您也可以出于同样的目的使用Python的内置函数sorted()

sorted(list, key=..., reverse=...)
注意:sort()和sorted()之间最简单的区别是:sort()不返回任何值,而sorted()返回一个iterable列表

因此,在您的情况下,
answer=sorted(newList)

如果希望它返回排序列表,可以使用sorted()方法。 更方便

方法修改列表并返回None

如果仍然要使用sort,可以这样做

l1 = []
n = int(input())

for i in range(n):
  user = int(input())
  l1.append(user)
l1.sort(reverse=True)
print(l1)

我认为您不需要多次将项转换为字符串。通常一次就足够了,而且在输入到cleanUp时也更干净。这只是一个愚蠢的想法,但是如果你想要一个唯一项的列表,为什么不转换成一个集合呢?然后,如果需要,可以将它们转换回列表
theSet=set(theSet)
完成后,您只需将其返回列表:
theList=list(theSet)
done。简单。再加上@runlevel0所说的(这是一个好主意):你可以将一个
theSet'转换成一个带有
sorted(theSet)`的排序列表。非常不规则的语言这是一种核心的语言,但有问题/令人恼火的语言哲学选择。链在python中通常是一个孤立的概念。有趣的是,
split(“:”).lower()
是一个坏链,因为
split
返回的列表没有
lower
方法。
返回排序(newList)
更短。这不重要,因为变量是本地变量,但就地排序在某些情况下可能会更改共享变量。有趣的是,如果将条目添加到列表中,则无论是
a.append('x')
,还是
a.extend('x)
,都不能在末尾链接
sort()
。它必须分成两行。如果方法返回列表,那就更好了!同样的信息也正是因为这样做才咬了我一口。因此,您必须将该内容分成两行,之后必须在列表上使用
.sort()
而不是
sorted()
,因为这会生成相同的错误
l=['1'];l=sorted(l.append('2'))
(我刚刚添加了分号,以便您可以剪切/粘贴并运行)我还想添加它,这可能值得一看:,在我的中,我已经在考虑将列表重构为集合,因为我不想重复,然后正在寻找SortedSet实现,在collections模块中没有找到一个。。。来源:
sort
函数为什么这样设计?是否存在任何性能开销或其他灾难恢复
list.sort(key=..., reverse=...)
sorted(list, key=..., reverse=...)
l1 = []
n = int(input())

for i in range(n):
  user = int(input())
  l1.append(user)
sorted(l1,reverse=True)
l1 = []
n = int(input())

for i in range(n):
  user = int(input())
  l1.append(user)
l1.sort(reverse=True)
print(l1)