J'ai une liste de chaînes comme celle-ci:
['Aden', 'abel']
Je veux trier les éléments, insensible à la casse. Alors je veux obtenir:
['abel', 'Aden']
Mais j'obtiens le contraire avec sorted()
ou list.sort()
, car les majuscules apparaissent avant les minuscules.
Comment puis-je ignorer le cas? J'ai vu des solutions qui impliquent de mettre en minuscules tous les éléments de la liste, mais je ne veux pas changer la casse des éléments de la liste.
Réponses:
Dans Python 3.3+, il existe une
str.casefold
méthode spécialement conçue pour la correspondance sans casse:Dans Python 2, utilisez
lower()
:Cela fonctionne pour les chaînes normales et unicode, car elles ont toutes les deux une
lower
méthode.En Python 2, cela fonctionne pour un mélange de chaînes normales et unicode, car les valeurs des deux types peuvent être comparées entre elles. Python 3 ne fonctionne pas comme ça, cependant: vous ne pouvez pas comparer une chaîne d'octets et une chaîne unicode, donc dans Python 3, vous devriez faire la bonne chose et trier uniquement les listes d'un type de chaîne.
la source
str.lower
fonction générale assorted(lst, key=str.lower)
ou (Python 2) en utilisant lalower
méthode dustring
module assorted(lst, key=string.lower)
. On peut aussi utiliserstr.lower
pour les chaînes en Python 2, mais il faudrait alors utiliserunicode.lower
pour lesunicode
objets, alors que l'onstring.lower
accepte les deux (ce qui, comme vous le dites, n'est probablement pas vraiment un mode de fonctionnement "sain", cependant).Dans Python 3,
str
c'est unicode, mais dans Python 2, vous pouvez utiliser cette approche plus générale qui fonctionne à la fois pourstr
etunicode
:la source
[['Aden'], ['abel']]
sorted(x,key=lambda i:i[0].lower())
Vous pouvez également essayer ceci pour trier la liste sur place:
la source
Cela fonctionne dans Python 3 et n'implique pas de mettre le résultat en minuscules (!).
la source
En python3, vous pouvez utiliser
la source
Je l'ai fait de cette façon pour Python 3.3:
Ensuite, vous pouvez simplement appeler cette fonction:
la source
Tri insensible à la casse, tri de la chaîne en place , en Python 2 OU 3 (testé en Python 2.7.17 et Python 3.6.9):
La clé est
key=str.lower
. Voici à quoi ressemblent ces commandes avec seulement les commandes, pour un copier-coller facile afin que vous puissiez les tester:Notez que si vos chaînes sont des chaînes Unicode, cependant (comme
u'some string'
), alors en Python 2 uniquement (PAS en Python 3 dans ce cas) lax.sort(key=str.lower)
commande ci-dessus échouera et produira l'erreur suivante:Si vous obtenez cette erreur, mettez à niveau vers Python 3 où ils gèrent le tri Unicode, ou convertissez d'abord vos chaînes Unicode en chaînes ASCII, en utilisant une compréhension de liste, comme ceci:
Références:
la source
Essaye ça
Production
['abel', 'Aden']
la source