2017-06-29 3 views
13

Comment trier les entiers par ordre alphabétique? Comme ceci:Comment trier les entiers par ordre alphabétique

integers = [10, 1, 101, 2, 111, 212, 100000, 22, 222, 112, 10101, 1100, 11, 0] 

imprimé comme celui-ci sur la console Python

[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222] 

J'ai essayé

def sort_integers(integers): 
    return sorted(integers) 

mais je suppose que vous devez le faire de cette façon

def sort_integers(integers): 
    return sorted(integers, key = lambda.......) 

Je ne sais pas quoi faire rite après le lambda?

Répondre

27
sorted(integers, key=str) 

-> 
[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222] 

Explication: str est une fonction qui jette les entiers en chaînes. Puisque sorted trie les chaînes par ordre alphabétique par défaut, cela fait exactement ce que vous avez demandé.

11

Vous pouvez simplement utiliser str comme key:

sorted(integers,key=str)

Voici donc pour chaque élément, la fonction str est appelée, qui convertit le int en str ing. Ce n'est pas en soi spectaculaire. Mais la comparaison des chaînes est différente: elle trie lexicographiquement.

>>> sorted([0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222],key=str) 
[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222] 
4

Si vous voulez trier vos entiers lexicographique comme si elles étaient des chaînes, vous pouvez dire Python de les traiter comme des chaînes lors du tri:

>>> integers = [10, 1, 101, 2, 111, 212, 100000, 22, 222, 112, 10101, 1100, 11, 0] 
>>> sorted(integers, key=lambda n: str(n)) 
[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222] 
>>> 

Mais vous ne fait même pas avoir la partie lambda n: ... non plus. Vous pouvez simplement passer la fonction str en tant que key et Python saura quoi faire. appelant str(n)n est chaque élément dans votre liste:

>>> sorted(integers, key=str) 
[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222] 
>>> 

Ainsi, votre fonction finirait par être:

def sort_integers(integers): 
    return sorted(integers, key=str) 
0

ceci fonctionne

list(map(int, (sorted(str(i) for i in integers)))) 

sortie:

[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222] 
+1

Mais il veut que la liste résultante soit un nombre entier. –

+1

merci, j'ai oublié ça. mis à jour – Alter

+1

Votre appel trié n'a pas besoin de faire ce qu'il fait non plus. Semblable au reste des réponses il suffit de passer votre liste avec un argument clé. – idjaw

0

Essayez un Most Significant Digit Radix Sort. Cela évite d'avoir à convertir les entiers en chaînes, mais est plus difficile à implémenter, sauf si vous utilisez une bibliothèque ou un autre pré-écrit code.

+1

Alors que cela peut théoriquement répondre à la question, [il serait préférable] (// meta.stackoverflow.com/q/8259) pour inclure les parties essentielles de la réponse ici, et fournir le lien pour référence. –