【问题标题】:Evaluating strings against integers (Python) [duplicate]根据整数评估字符串(Python)[重复]
【发布时间】:2012-07-25 07:51:05
【问题描述】:

可能重复:
How does Python compare string and int?

我有一个 Python 脚本没有按预期评估两个值。值'10' 被确定为大于200。问题是保存 '10' 值的变量实际上是一个字符串而不是整数(而 200 是一个整数)。

我的问题是:

当根据整数评估字符串时,Python 会经历什么过程?如何进行比较?

例如:

string="10"
int=200
if string >= int:
  print("String is greater")
else:
  print("Int is greater")

会输出:

String is greater

这是为什么?我原以为 Python 在尝试比较这两种类型时会出错并退出。

【问题讨论】:

  • 当它们都是字符串时更好,"10" < "200" 是真的,但是由于错误的原因,这使得在你做"20" < "100" 时不可能抛出错误并且真的让你感到困惑。故事的寓意:知道你的对象是什么类型:)

标签: python string variables integer evaluation


【解决方案1】:

Python 2.x 允许比较任何类型的对象,并保证结果可重现。在 Python 3.x 中,比较无法有意义排序的对象会导致错误。 2.x 行为的基本原理是,有时能够方便地使用list.sort() 异构列表。新 3.x 行为的基本原理是旧行为隐藏了错误。

Python 2.x 使用的排序是一个实现细节。 CPython 使用了一些相当奇怪的规则,粗略

NoneType

(不能保证我做对了,但我不会费心去检查。这是一个实现细节,不要依赖它。)

【讨论】:

    【解决方案2】:

    来自the docs

    运算符 、==、>=、

    【讨论】:

      【解决方案3】:

      在 Python 3 中,当您尝试比较字符串和 int(或任何 2 个不可比较的类型)时,您确实会得到 TypeError

      在 Python 2 中,行为是特定于实现的;在 cPython 中,类型的名称通常最终会进行比较(尽管您可能不应该依赖它...),因此字符串总是大于整数。

      【讨论】:

      • 最后一句话并不完全正确。试试{} < 42——这会导致False,当然"dict" < "int"
      • @SvenMarnach:编辑以对冲我的赌注。 :)
      猜你喜欢
      • 1970-01-01
      • 2020-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      • 2011-08-15
      • 1970-01-01
      • 2020-02-29
      相关资源
      最近更新 更多