开发者

Why is '362' > 378? [duplicate]

开发者 https://www.devze.com 2023-03-11 02:04 出处:网络
This question already has answers here: Closed 11 years ago. Possible Duplicate: How does Python compare string and int?
This question already has answers here: Closed 11 years ago.

Possible Duplicate:

How does Python compare string and int?

An intern was just asking me to help debug code that looked something like this:

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

.开发者_高级运维..when the first line should have been:

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

Thus, the code was choosing the string '364' rather than the integer 374. How on earth does python compare a string and an integer? I could understand comparing a single character (if python had a char datatype) to an integer, but I don't see any straightforward way to compare a string of characters to an integer.


Python 2.x compares every built-in type to every other. From the docs:

Objects of different types, except different numeric types and different string types, never compare equal; such objects are ordered consistently but arbitrarily (so that sorting a heterogeneous array yields a consistent result).

This "arbitrary order" in CPython is actually sorted by type name.

In Python 3.x, you will get a TypeError if you try to compare a string to an integer.


When comparing values of incompatible types in python 2.x, the ordering will be arbitrary but consistent. This is to allow you to put values of different types in a sorted collection.

In CPython 2.x any string will always be higher than any integer, but as I said that's arbitrary. The actual ordering does not matter, it is just important that the ordering is consistent (i.e. you won't get a case where e.g. x > y and y > z, but z > x).


From the documentation:

Most other objects of built-in types compare unequal unless they are the same object; the choice whether one object is considered smaller or larger than another one is made arbitrarily but consistently within one execution of a program

Hope this is clear enough - like it has been said, it is arbitrary.

0

精彩评论

暂无评论...
验证码 换一张
取 消