为什么"362">378?



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

一个实习生刚刚让我帮助调试看起来像这样的代码:

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)与整数进行比较,但我看不到任何将字符串与整数进行直接比较的方法。

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

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

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

在Python3.x中,如果尝试将字符串与整数进行比较,则会得到一个TypeError

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

在CPython 2.x中,任何字符串都将始终高于任何整数,但正如我所说,这是任意的。实际的排序并不重要,重要的是排序是一致的(即,不会出现例如x > yy > z,而是z > x的情况)。

来自文档:

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

希望这一点足够清楚——正如人们所说,这是武断的。

相关内容

  • 没有找到相关文章

最新更新