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

2024-12-02 08:42:00
admin
原创
219
摘要:问题描述:我已经能够验证 确实会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大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2545  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1551  
  建筑工程全生命周期涉及从项目规划、设计、施工到运营维护等多个复杂阶段,每个阶段都产生和依赖大量信息。PLM(产品生命周期管理)系统作为一种整合数据、流程和人员的数字化解决方案,正逐渐成为建筑行业实现高效协同与可持续发展的关键支撑。通过数字化转型,PLM系统能够优化各阶段的工作流程,提升项目整体质量和效率,为建筑工程的全...
plm是什么软件   1  
  产品生命周期管理(PLM)系统在企业资源成本率优化方面发挥着至关重要的作用。通过构建有效的数据模型,PLM系统能够整合企业各个环节的数据,为资源成本的精准分析和优化提供有力支持。这不仅有助于企业降低成本,还能提升产品质量和市场竞争力。PLM系统概述PLM系统是一种用于管理产品从概念设计到退役全生命周期过程中所有信息和流...
PLM项目管理软件   1  
  产品生命周期管理(PLM)系统在现代企业的产品研发、生产与管理过程中扮演着至关重要的角色。它整合了从产品概念设计到产品退役的全生命周期数据与流程,助力企业提升效率、降低成本并增强创新能力。随着技术的不断发展,到 2025 年,PLM 系统将具备一系列核心功能模块,这些模块将深度影响企业的运营与发展。产品数据管理模块产品...
plm是什么意思   0  
热门文章
项目管理软件有哪些?
曾咪二维码

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

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

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用