6
votes

Pourquoi le tri Python place-t-il les éléments en majuscules en premier?

Je ne cherche pas de solution. Vous cherchez à comprendre pourquoi Python trie de cette façon.

>>> a = ['aaa','Bbb']
>>> a.sort()
>>> print(a)
['Bbb', 'aaa']

>>> a = ['aaa','bbb']
>>> a.sort()
>>> print(a)
['aaa', 'bbb']


4 commentaires

Par défaut, il trie par valeur ASCII (ou valeur UNICODE pour les chaînes UNICODE) où les lettres majuscules ont des nombres plus petits que les lettres minuscules.


66 est inférieur à 97: D


@MichaelButscher "les lettres majuscules ont des nombres plus petits que les lettres minuscules" n'est pas vrai dans tout l'Unicode (même si vous essayez de créer des paires de formes inférieure et supérieure de la même lettre.). Matt, vous pouvez le considérer comme un ordre fixe et arbitraire puisque vous ne spécifiez aucune règles de tri de texte , comme comme via une locale.


Liste de tri des chaînes avec des paramètres régionaux spécifiques en python


3 Réponses :


11
votes

Ceci est dû au fait que les caractères majuscules ont une valeur ASCII inférieure à celle des minuscules. Et donc si nous les trions par ordre croissant, les majuscules viendront avant les minuscules

  • ASCII de A est 65
  • ASCII de a est 97

65 <97

Et donc A si vous triez par ordre croissant


0 commentaires

5
votes

4 commentaires

str n'est pas une séquence d'octets sur Python 3. str est une séquence de points de code Unicode. Bien que les valeurs soient les mêmes dans la plage ascii.


@jfs: Vrai. J'aurais pu jurer que l'OP avait en quelque sorte marqué cela comme Python 2 spécifiquement, mais clairement pas; c'était peut-être une autre question que j'ai lue à peu près au même moment.


oui, la première révision de la question concerne spécifiquement Python 2.


Maintenant que nous avons vu techniquement pourquoi - je me demande encore pratiquement pourquoi quelqu'un voudrait cela?



0
votes

Python traite les lettres majuscules comme inférieures aux lettres minuscules. Si vous souhaitez trier en ignorant la casse. Vous pouvez faire quelque chose comme ceci:

a = ['aaa','Bbb']
a.sort(key=str.lower)
print(a)

Outputs:
['aaa', 'Bbb']

Ce qui ignore la casse. Le paramètre clé "str.lower" est ce qui vous permet de faire cela. La documentation suivante devrait vous aider. https://docs.python.org/3/howto/sorting.html


0 commentaires