【问题标题】:Getting error when trying to calculate the length of the array after sort in python尝试在python中排序后计算数组的长度时出错
【发布时间】:2021-11-12 00:37:02
【问题描述】:

我对下面的代码执行完全感到困惑,

a= [10,30,4]
a = a.sort()
r = len(a) - 1
print (r)

执行上述代码时,我得到
r = len(a) - 1 TypeError:“NoneType”类型的对象没有 len()

但是,如果我在没有排序的情况下找到长度或在找到长度后对数组进行排序时,代码运行良好。这有什么原因吗?

【问题讨论】:

    标签: python sorting variable-length


    【解决方案1】:

    a.sort() 是就地操作。它就地修改列表并且不返回任何内容。在你的 Python 解释器中输入 help(list.sort) 来查看 list.sort 的文档。

    >>> 帮助([].sort) 内置函数排序的帮助: builtins.list 实例的 sort(*, key=None, reverse=False) 方法 对列表进行升序排序,返回无。 排序是就地的(即列表本身已被修改)且稳定(即 保持两个相等元素的顺序)。

    所以重点是,你不应该分配listobject.sort()的返回值,因为它总是返回None

    【讨论】:

      【解决方案2】:

      函数sort返回的值是None

      因此,当您尝试分配 a = a.sort() 时,它与 a = None 相同

      这里是sorting basics的参考

      你的代码应该是这样的

      a= [10,30,4]
      a.sort()
      r = len(a) - 1
      print (r)
      

      【讨论】:

      • 嗨!您是否会考虑通过解释list.sortsorted 之间的区别并包含指向相关文档的链接来改进您的答案?
      【解决方案3】:

      除了其他答案,如果你想要一个非就地函数,那么你可以运行:

      a = sorted(a)

      【讨论】:

        猜你喜欢
        • 2020-04-30
        • 2021-01-28
        • 2022-01-24
        • 2020-10-30
        • 1970-01-01
        • 2017-08-25
        • 2022-06-16
        • 2021-10-17
        • 2022-11-17
        相关资源
        最近更新 更多