当前位置: 首页 > 面试题库 >

为什么None在python中最小?

益银龙
2023-03-14
问题内容

我从python学到的内容无:

None is frequently used to represent the absence of a value

当我放入列表并用数字和字符串排序时。我得到以下结果,这意味着它是最小的数字?

逆转:

>>> sorted([1, 2, None, 4.5, (-sys.maxint - 1), (sys.maxint - 1), 'abc'], reverse=True)
['abc', 9223372036854775806, 4.5, 2, 1, -9223372036854775808, None]
>>>

正常排序:

>>> sorted([1, 2, None, 4.5, (-sys.maxint - 1), (sys.maxint - 1), 'abc'])
[None, -9223372036854775808, 1, 2, 4.5, 9223372036854775806, 'abc']
>>>

python sorted function如何与None一起工作?


问题答案:

比较不同类型时,CPython 2应用了一些不同的规则:

  • None 首先排序。
  • 数字先于其他类型,并且在数字之间进行比较。
  • 其他类型按其类型 名称 排序,除非它们显式实现比较方法。

此外,某些类型实现自定义排序规则,并且可以拒绝所有排序尝试。例如,当您尝试对复数进行排序时,复数会引发异常;而datetime当您尝试对其他类型进行相对排序时,对象会复数。

Python参考文档中没有对此进行记录。请参阅中的默认比较代码object.c。这是一个实现细节,而不是您的代码应依赖的东西。该比较运算符文档状态:

大多数内置类型的其他对象比较不相等,除非它们是同一对象。在一个程序的执行过程中,可以任意选择,但是始终如一地选择是将一个对象视为小于还是大于一个对象。

目的是在对一系列混合对象进行排序时,使不同类型之间的比较稳定。

在Python
3中,比较规则得到了加强。您只能比较明确实现比较的对象。经过多年的经验得出的结论是,允许进行任意比较只会导致更多的混乱。例如,将字符串与数字与整数进行比较总是会使新手感到困惑。

您的代码将引发异常。



 类似资料:
  • 问题内容: 不确定此问题是否特定于该语言以及如何在中实现。 问题答案: append是一种变异(破坏性)操作(它会在适当位置修改列表,而不是返回新列表)。进行无损等效的惯用方式append是 回答你的问题,我的猜测是,如果返回新修改的列表,用户可能会认为它是非破坏性的,即他们可能会编写如下代码 并期望成为

  • 问题内容: 为什么要用返回? 我如何获得改组后的值而不是? 问题答案: 更改x列表到位。 就地更改结构的方法通常返回None,而不是修改后的数据结构。 如果要基于现有列表创建新的随机混排列表,并按顺序保留现有列表,则可以使用输入的完整长度: 你还可以将用于排序键: 但这会调用排序(操作),而采样到输入长度仅需要O(N)操作(与所使用的过程相同,即从收缩池中换出随机值)。 演示:

  • 问题内容: 我最近遇到了这种语法,但我没有意识到两者之间的区别。 如果有人可以告诉我与众不同,我将不胜感激。 问题答案: 一个类可以自由选择以任何方式实现比较,并且可以选择与None进行比较意味着某种意义(这实际上是有道理的;如果有人告诉你从头开始实现None对象,那么你将如何获得它来比较True?反对自己?)。 实际上,由于自定义比较运算符很少见,因此差异不大。但是你应该使用般规则。

  • 问题内容: 为什么要用Python返回? 我如何获得改组后的值而不是? 问题答案: 更改列表 到位 。 在原位更改结构的Python API方法通常返回,而不是修改后的数据结构。 如果要基于现有列表创建 新的 随机混排列表,并按顺序保留现有列表,则可以使用输入的完整长度: 您还可以将with用于排序键: 但这会调用排序(O(NlogN)操作),而采样到输入长度仅需要O(N)操作(与所使用的过程相同

  • 问题内容: 我正在学习理解力。我得到了print(x)部分(我认为。它打印通过了’in’测试的x的值),但是为什么以后还返回None列表呢? 问题答案: 您使用列表理解来打印列表中的项目,然后打印列表本身。尝试将列表分配给变量。 现在,该列表以x表示,没有打印出来。清单还在那里…

  • 问题内容: 我正在使用读取csv文件的两列,然后将值分配给字典。这些列包含数字和字母字符串。有时在某些情况下单元格为空。在我看来,应读取但应分配该字典条目的值。当然,由于它具有空值,因此更能描述一个空单元格,而nan只是说读取的值不是数字。 我的理解正确吗,和之间有什么区别?为什么分配而不是? 另外,我的字典检查是否有任何空单元格一直在使用: 但这给了我一个错误,说我不能使用此检查v。我猜这是因为