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

2024-12-02 08:42:00
admin
原创
223
摘要:问题描述:我已经能够验证 确实会findUniqueWords产生已排序的list。但是,它不会返回列表。为什么?def findUniqueWords(theList): newList = [] words = [] # Read a line at a time for...

问题描述:

我已经能够验证 确实会findUniqueWords产生已排序的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

解决方案 1:

list.sort对列表进行排序,即它不会返回新列表。只需写

newList.sort()
return newList

解决方案 2:

问题在于:

answer = newList.sort()

sort不返回排序后的列表;相反,它对列表进行排序。

使用:

answer = sorted(newList)

解决方案 3:

这是来自 Python 开发列表中的 Guido van Rossum 的一封电子邮件,self解释了为什么他选择不返回影响对象的操作并且不返回新对象。

这源自一种编码风格(在其他各种语言中都很流行,我相信 Lisp 尤其喜欢它),其中对单个对象的一系列副作用可以像这样链接起来:

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

这与

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

我发现链式调用形式对可读性有威胁;它要求读者必须非常熟悉每种方法。第二种形式清楚地表明,这些调用中的每一个都作用于同一个对象,因此,即使您不太了解该类及其方法,也可以理解第二次和第三次调用应用于 x(并且所有调用都是为了它们的副作用),而不是其他东西。

我想保留返回新值的操作的链接,比如字符串处理操作:

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

解决方案 4:

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]

请注意,返回值不是深层复制,因此请像往常一样谨慎对待列表中包含的元素的副作用操作:

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

解决方案 5:

Python 习惯性地从改变数据的函数和方法中返回None,例如list.sortlist.appendrandom.shuffle,这样做的目的是暗示它正在发生变异。

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

解决方案 6:

我在其他答案中没有看到的一小点智慧:

Python 中所有修改列表的可变对象(如列表)的方法都会返回None。因此,对于列表,这还包括 list.append()、list.reverse() 等。这就是为什么语法应该是

myList.sort()

同时,任何不可变对象(如字符串)的方法都必须像这样分配:

myString = myString.strip()

解决方案 7:

要了解为什么它不返回列表:

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)

解决方案 8:

如果希望返回排序后的列表,可以使用 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)
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2634  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1585  
  IPD(Integrated Product Development)流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。其中,技术评审与决策评审是IPD流程中至关重要的环节,它们既有明显的区别,又存在紧密的协同关系。深入理解这两者的区别与协同,对于企业有效实施IPD流程,提升产品开发效率与质量具有重要意义...
IPD管理流程   50  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、ClickUp、Freshdesk、GanttPRO、Planview、Smartsheet、Asana、Nifty、HubPlanner、Teamwork。在当今快速变化的商业环境中,项目管理软件已成为企业提升效率、优化资源分配和确保项目按时交付的关键工具。然而...
项目管理系统   49  
  建设工程项目质量关乎社会公众的生命财产安全,也影响着企业的声誉和可持续发展。高质量的建设工程不仅能为使用者提供舒适、安全的环境,还能提升城市形象,推动经济的健康发展。在实际的项目操作中,诸多因素会对工程质量产生影响,从规划设计到施工建设,再到后期的验收维护,每一个环节都至关重要。因此,探寻并运用有效的方法来提升建设工程...
工程项目管理制度   44  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用