为什么“362”> 378? [重复]

问题描述 投票:0回答:3

可能重复:
Python 如何比较字符串和整数?

一位实习生只是要求我帮助调试看起来像这样的代码:

widths = [image.width for image in images]
widths.append(374)
width = max(widths)

...第一行应该是:

widths = [int(image.width) for image in images]

因此,代码选择了字符串“364”而不是整数 374。Python 到底如何比较字符串和整数?我可以理解将单个字符(如果 python 有

char
数据类型)与整数进行比较,但我没有看到任何直接的方法来将字符串与整数进行比较。

comparison python-2.x
3个回答
11
投票

Python 2.x 将 every 内置类型与其他类型进行比较。来自文档

不同类型的对象,除了不同的数字类型和不同的字符串类型之外,永远不会比较相等;这些对象的顺序一致但任意(以便对异构数组进行排序会产生一致的结果)。

CPython 中的这种“任意顺序”实际上是按类型名称排序的。

在 Python 3.x 中,如果尝试将字符串与整数进行比较,您将得到

TypeError


6
投票

在 python 2.x 中比较不兼容类型的值时,排序将是任意但一致的。这是为了允许您将不同类型的值放入排序的集合中。

在 CPython 2.x 中,任何字符串都将始终高于任何整数,但正如我所说,这是任意的。实际的顺序并不重要,重要的是顺序一致(即您不会遇到

x > y
y > z
,而是
z > x
)的情况。


0
投票

来自文档

大多数其他内置类型的对象 比较不相等,除非它们是 同一个物体;选择是否之一 物体被认为较小或较大 比另一个是任意制作的 但在一次执行中始终如一 一个程序的

希望这足够清楚 - 就像已经说过的那样,它是任意的。

© www.soinside.com 2019 - 2024. All rights reserved.