L'idée clé ici est que la comparaison de chaînes ne se compare pas en fonction de l'ordre alphabétique ou de tout ordre naturel, mais plutôt de l'ordre des caractères en ASCII. Vous pouvez voir cette commande dans un ASCII table. Python compare le premier caractère de chaque chaîne, et s'il est le même, il passe au suivant. Il le fera jusqu'à ce que les caractères diffèrent, ou qu'une chaîne soit épuisée (auquel cas la chaîne la plus longue sera considérée comme plus grande).
Comme cdhowie a souligné, dans un codage ASCII décimal T
est 84, a
est 97, et t
est 116. Par conséquent:
>>> 'T' < 'a' < 't'
True
Pour montrer notre deuxième point:
>>> "apple" > "a"
True
Pour obtenir une comparaison plus naturelle voir: Does Python have a built in function for string natural sort?
Pour répondre à la question que vous avez ajoutée lors d'un montage:
La réponse simple est "oui". Une conversion de 11.1
en '11.1'
est en cours.
La réponse la plus compliquée concerne comment exactement la comparaison est implémentée en python. Les objets Python peuvent être comparés s'ils implémentent le Comparison magic methods. Il y a une bonne quantité de lecture que vous pouvez faire au sujet des internes Python dans ce lien. Comme @glibdup l'a souligné, ce qui précède est incorrect.
En python différents types sont compared based on the name of their type. Ainsi, puisque 'str' > 'float'
n'importe quelle chaîne sera plus grande que n'importe quel flotteur. Alternativement, n'importe quel tuple sera plus grand que n'importe quelle chaîne.
Est-ce que vous posez cette question parce que certaines données n'ont pas trié comme prévu? Si c'est le cas, vous pouvez passer une clé à la fonction de tri afin que la casse soit normalisée: 'my_strings.sort (key = str.upper)'. –
J'ai édité ma réponse pour inclure une brève réponse à la question que vous avez éditée. Si vous avez plus de questions sur comment cette conversion fonctionne, je vous recommande de lire le lien que j'ai fourni et de commencer une nouvelle question si vous en avez un. – Wilduck