Comment trier les lettres d'une chaîne par ordre alphabétique en Python

157

Existe-t-il un moyen simple de trier les lettres d'une chaîne par ordre alphabétique en Python?

Donc pour:

a = 'ZENOVW'

Je voudrais revenir:

'ENOVWZ'
Superdooperhero
la source

Réponses:

276

Tu peux faire:

>>> a = 'ZENOVW'
>>> ''.join(sorted(a))
'ENOVWZ'
KZ
la source
Notez que sorted(a)cela renverra une liste triée, donc pour les comparaisons de chaînes, vous n'avez pas besoin de le faire join()(voir les réponses de askewchan ci-dessous).
Skippy le Grand Gourou
Notez que cela ''.join(sorted(a, reverse=True, key=str.lower))peut être utilisé pour effectuer un tri inversé insensible à la casse. Cela pourrait être pratique.
Superdooperhero
89
>>> a = 'ZENOVW'
>>> b = sorted(a)
>>> print b
['E', 'N', 'O', 'V', 'W', 'Z']

sortedrenvoie une liste, vous pouvez donc en faire à nouveau une chaîne en utilisant join:

>>> c = ''.join(b)

qui joint les éléments de bavec une chaîne vide ''entre chaque élément.

>>> print c
'ENOVWZ'
Askewchan
la source
31

La solution Sorted () peut vous donner des résultats inattendus avec d'autres chaînes.

Liste des autres solutions:

Trier les lettres et les différencier:

>>> s = "Bubble Bobble"
>>> ''.join(sorted(set(s.lower())))
' belou'

Trier les lettres et les différencier tout en gardant les majuscules:

>>> s = "Bubble Bobble"
>>> ''.join(sorted(set(s)))
' Bbelou'

Trier les lettres et conserver les doublons:

>>> s = "Bubble Bobble"
>>> ''.join(sorted(s))
' BBbbbbeellou'

Si vous voulez vous débarrasser de l'espace dans le résultat, ajoutez la fonction strip () dans l'un de ces cas mentionnés:

>>> s = "Bubble Bobble"
>>> ''.join(sorted(set(s.lower()))).strip()
'belou'
Radek
la source
Hé, cette première solution était un peu utile pour un devoir dans lequel je devais trouver une lettre en utilisant la bissection. Oui, je connais déjà la classe de chaînes et la méthode find (), mais cela va à l'encontre du but de l'exercice;)
runlevel0
9

Vous pouvez utiliser réduire

>>> a = 'ZENOVW'
>>> reduce(lambda x,y: x+y, sorted(a))
'ENOVWZ'
Saquib
la source
7

La fonction Python sortedrenvoie un résultat basé sur ASCII pour la chaîne.

INCORRECT : dans l'exemple ci-dessous, eet dest en retard Het en Wraison de sa valeur ASCII.

>>>a = "Hello World!"
>>>"".join(sorted(a))
' !!HWdellloor'

CORRECT : pour écrire la chaîne triée sans changer la casse de la lettre. Utilisez le code:

>>> a = "Hello World!"
>>> "".join(sorted(a,key=lambda x:x.lower()))
' !deHllloorW'

Si vous souhaitez supprimer tous les signes de ponctuation et les chiffres. Utilisez le code:

>>> a = "Hello World!"
>>> "".join(filter(lambda x:x.isalpha(), sorted(a,key=lambda x:x.lower())))
'deHllloorW'
Priyank Arora
la source
3

le code peut être utilisé pour trier la chaîne par ordre alphabétique sans utiliser aucune fonction intégrée de python

k = input ("Entrez à nouveau une chaîne")

li = []
x = len(k)
for i in range (0,x):
    li.append(k[i])

print("List is : ",li)


for i in range(0,x):
    for j in range(0,x):
        if li[i]<li[j]:
            temp = li[i]
            li[i]=li[j]
            li[j]=temp
j=""

for i in range(0,x):
    j = j+li[i]

print("After sorting String is : ",j)
Kanan Joshi
la source
1
Idéalement, vous souhaitez ajouter des explications au code pour préciser ce qu'il fait. Bienvenue à SO!
geisterfurz007
1

J'ai vraiment aimé la réponse avec la fonction reduction (). Voici une autre façon de trier la chaîne en utilisant accumulate ().

from itertools import accumulate
s = 'mississippi'
print(tuple(accumulate(sorted(s)))[-1])

trié (s) -> ['i', 'i', 'i', 'i', 'm', 'p', 'p', 's', 's', 's', 's' ]

tuple (accumuler (trié (s)) -> ('i', 'ii', 'iii', 'iiii', 'iiiim', 'iiiimp', 'iiiimpp', 'iiiimpps', 'iiiimppss', 'iiiimppsss ',' iiiimppssss ')

Nous sélectionnons le dernier index (-1) du tuple

Mono
la source
Bravo pour votre première réponse. Considérez simplement une chaîne de 1 million de caractères, votre commande tuple () créera une énorme liste d'options accumulées qui utilise inutilement une grande quantité de mémoire.
tda le
D'accord. Donc, pour améliorer la complexité de l'espace, l'idée est de travailler avec l'itérable lui-même, instaed de le convertir en une structure de données. Agréable. Merci.
Mono