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
).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With