You need a logic to compare t-uples.
The first item is evaluated. If different, you get the result. If equal, compare second:
(1, "zebra") < (1, "apple") // false
It is the same logic as in word dictionary: you compare the first letter ; if different, you have the order ; if equal, then compare the second and so on.
You could redefine your own, but what would be your spec ?
What would you want the result of (1, "zebra") < (2, "apple") to be ? false ? And why, because zebra is not less than apple ?
But you have conflicting elements: 1 < 2 (should give true) but "zebra" > "apple" (should give false
In addition, it must work in a consitent way with > operator.
Then, one will argue that you ignore that 1 < 2
Which to be considered ? The logic of tuple comparison is to consider the first to begin with.
Another way would be to revert the t-uples:
("zebra", 1) and ("apple", 2)
For the 2nd question
Why is Zebra not less than apple, and apple is less than bird ? How do you know this, do you count the letters ? or how is it done ? What is the criteria to determine ?
In fact "Zebra" < "apple" is true.
"zebra" < "apple" is false
because strings are compared character by character and letters are in order of A … Z a … z
So, when comparing strings, it is safer to convert first to lowercase both
print("Zebra".lowercased() < "apple".lowercased())
Now yields false
Once I had the same question. The fact is that the characters are not compared alphabetically, but by the code of the character in the Unicode table.