I'm taking a computer science course, and I'm curious about a specific comparison in Python. When I run `print("3" < "13")`, I expected it to return an error, but surprisingly it returns false. Can someone explain the reasoning behind this behavior?
4 Answers
Actually, this is specific to the way strings are implemented in Python. Strings are sequences of characters, and their comparisons are based on Unicode values rather than their numeric equivalents. That’s why '3' is greater than '13' in this scenario.
In languages like Python, string comparisons are done lexicographically, which means it compares the strings character by character based on their ASCII values. Since the ASCII value for '1' (49) is less than for '3' (51), '3' is considered greater than '13'. So rather than treating them as integers, Python looks at them as letters and decides how they order alphabetically.
Yes, Python does type coercion quite differently from some other languages. The comparison is done based on the first character of each string. If you're mixing numbers with strings, be cautious; it can lead to some unexpected results like this. For correct numerical comparisons, you should convert them to integers first!
You're seeing false because Python is comparing the two strings as they appear. When it checks '3' against '1', it finds that '3' actually comes after '13' in a dictionary order. For string comparisons, it's all about how characters are ordered, not their numerical values. You could look up an ASCII table to see the values assigned to each character!
So the key takeaway is that strings aren't treated as their numeric equivalents. That's a handy trick to know!

I didn't know Python compared strings that way! I always thought comparison operators were only for numbers.