Question

Quelle est la meilleure façon de créer une liste triée par ordre alphabétique en Python ?

Était-ce utile?

La solution

Réponse de base :

mylist = ["b", "C", "A"]
mylist.sort()

Cela modifie votre liste d'origine (c'est-à-diretrie sur place).Pour obtenir une copie triée de la liste, sans changer l'original, utilisez le sorted() fonction:

for x in sorted(mylist):
    print x

Cependant, les exemples ci-dessus sont un peu naïfs, car ils ne prennent pas en compte les paramètres régionaux et effectuent un tri sensible à la casse.Vous pouvez profiter du paramètre facultatif key pour spécifier un ordre de tri personnalisé (l'alternative, en utilisant cmp, est une solution obsolète, car elle doit être évaluée plusieurs fois - key n'est calculé qu'une fois par élément).

Donc, pour trier selon les paramètres régionaux actuels, en tenant compte des règles spécifiques à la langue (cmp_to_key est une fonction d'assistance de functools ):

sorted(mylist, key=cmp_to_key(locale.strcoll))

Et enfin, si vous en avez besoin, vous pouvez spécifier un paramètres régionaux personnalisés pour le tri :

import locale
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') # vary depending on your lang/locale
assert sorted((u'Ab', u'ad', u'aa'),
  key=cmp_to_key(locale.strcoll)) == [u'aa', u'Ab', u'ad']

Dernière remarque :vous verrez des exemples de tri insensible à la casse qui utilisent le lower() méthode - celles-ci sont incorrectes, car elles ne fonctionnent que pour le sous-ensemble de caractères ASCII.Ces deux éléments sont faux pour toutes les données non anglaises :

# this is incorrect!
mylist.sort(key=lambda x: x.lower())
# alternative notation, a bit faster, but still wrong
mylist.sort(key=str.lower)

Autres conseils

Il convient également de noter le sorted() fonction:

for x in sorted(list):
    print x

Cela renvoie une nouvelle version triée d'une liste sans modifier la liste d'origine.

list.sort()

C'est aussi simple que ça :)

La bonne façon de trier les chaînes est la suivante :

import locale
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') # vary depending on your lang/locale
assert sorted((u'Ab', u'ad', u'aa'), cmp=locale.strcoll) == [u'aa', u'Ab', u'ad']

# Without using locale.strcoll you get:
assert sorted((u'Ab', u'ad', u'aa')) == [u'Ab', u'aa', u'ad']

L'exemple précédent de mylist.sort(key=lambda x: x.lower()) fonctionnera bien pour les contextes ASCII uniquement.

Mais comment cela gère-t-il les règles de tri spécifiques à une langue ?Est-ce que cela prend en compte les paramètres régionaux ?

Non, list.sort() est une fonction de tri générique.Si vous souhaitez trier selon les règles Unicode, vous devrez définir une fonction de clé de tri personnalisée.Vous pouvez essayer d'utiliser le pyuca module, mais je ne sais pas à quel point il est complet.

Veuillez utiliser la fonction sorted() dans Python3

items = ["love", "like", "play", "cool", "my"]
sorted(items2)

Supposer s = "ZWzaAd"

Pour trier au-dessus de la chaîne, la solution simple sera inférieure à un.

print ''.join(sorted(s))

Ou peut-être:

names = ['Jasmine', 'Alberto', 'Ross', 'dig-dog']
print ("The solution for this is about this names being sorted:",sorted(names, key=lambda name:name.lower()))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top