Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is '362' > 378? [duplicate]

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.

like image 459
Jason Baker Avatar asked Dec 03 '22 08:12

Jason Baker


2 Answers

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.

like image 123
Sven Marnach Avatar answered Dec 20 '22 11:12

Sven Marnach


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).

like image 33
sepp2k Avatar answered Dec 20 '22 12:12

sepp2k