maximum = max(1, 1.25, 3.14, 'a', 1000)
- why is it giving'a'
as the answer? Shouldn't'a'
get converted to ASCII and be checked?maximum = max(1, 2.15, "hello")
gives"hello"
as answer. How does this answer come?
Asked
Active
Viewed 307 times
-5

jonrsharpe
- 115,751
- 26
- 228
- 437

Kiran KN
- 85
- 1
- 10
2 Answers
12
From the documentation -
CPython implementation detail: Objects of different types except numbers are ordered by their type names; objects of the same types that don’t support proper comparison are ordered by their address
Hence str
is always greater than int
.
Some more examples -
>>> class test:
... pass
...
>>> t = test()
>>> 'a' > 5
True
>>> t > 'a'
False
>>> type(t)
<type 'instance'>
>>> t > 10
False
>>> type(True)
<type 'bool'>
>>> True > 100
False
>>> False > 100
False
Please note the type name of test
class' object is instance
that is why t > 5
is False
.

Anand S Kumar
- 88,551
- 18
- 188
- 176
-
Out of curiosity, what makes `str` greater than `int`? It isn't alphabetical so how do they order the type names? – 2016rshah Jun 26 '15 at 15:19
-
2@2016rshah what has brought you to the conclusion that `'str' > 'int'` **isn't** alphabetical? – jonrsharpe Jun 26 '15 at 15:21
-
1They are alphaetical, where did you see its not alphabetical? For object of a custom class, the type is `instance` . – Anand S Kumar Jun 26 '15 at 15:23
-
1Oh wait never mind I am not entirely sure what brought me to that conclusion. Silly mistake, sorry. Should I delete my comment? – 2016rshah Jun 26 '15 at 15:23
8
Because strings in Python 2 are always greater than numbers.
>>> "a" > 1000
True
In Python3 it's actually fixed, they are incomparable now (because there is actually no way to compare 42 and "dog").

Vadim Pushtaev
- 2,332
- 18
- 32