【问题标题】:Compare string to float in Python [duplicate]将字符串与 Python 中的浮点数进行比较 [重复]
【发布时间】:2013-10-31 17:55:51
【问题描述】:

我在 python shell 中试过这个

>>> a='apple'
>>> b=11.1
>>> a>b
True
>>> a
'apple'
>>> b>a
False

有人可以向我解释a>b 的真实性吗?当a 是字符串且b 是浮点数时。

【问题讨论】:

标签: string floating-point python-2.x


【解决方案1】:

不同类型元素之间的顺序比较是 Python 2.x 中的一个“设计错误”,已在 Python 3 中删除(您会遇到运行时错误)。

在 3.x 之前,纠正它不是一个选项,因为许多现有软件对异构容器进行排序(版本 3 是第一个故意破坏向后兼容性的软件)。

在 Python 2.x 中,您可以比较 </> 的任何值,唯一的例外是明确禁止这样做的复数。

不同类型比较的排序结果是任意的,但至少对于给定的 Python 解释器运行是固定的,请参阅http://docs.python.org/2/reference/expressions.html#not-in。不同的非数字类型的值总是被认为是不同的。

【讨论】:

  • 简单来说这是 2.x 中的错误,给出了相当随机的结果并从 3.x 中删除
  • @GauravAgarwal: "random" 是多余的,它是任意的(例如,如果 'a'<3 则任何字符串都小于任何整数)并且您可以例如实现排序,因为您可以获得传递性。这是一个在 python 3.x 之前无法修复的设计错误,因为人们开始依赖它。
【解决方案2】:

在 Python 2 中,无法比较的类型之间的比较通常“有效”,给出毫无意义的结果。有时很有趣:'aleph0' > float('+inf')。但大多数时候它只是愚蠢的。

所以Python 3 has removed this'a' > 1.0 相当合理地在它下面提出了一个TypeError

【讨论】:

    猜你喜欢
    • 2016-07-08
    • 2021-07-10
    • 1970-01-01
    • 2011-10-19
    • 2012-11-27
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    相关资源
    最近更新 更多