Supprimer les doublons de la liste et les trier par nombre ? (python 3)
Comment supprimer tous les doublons de la liste et les classer en fonction du nombre ?
s = ["foo", "this", "lem", "foo", "lem"]
s = ["foo", "ebh", "wosv", "wosv", "ebh", "4whcu"]
#should return
>>> ["foo", "lem", "this"]
>>> ["ebh", "wosv", "foo", "4whcu"]
Règles:
- Doit être plus court que le code ci-dessous en termes de taille d'octet.
- L'ordre doit être basé sur le nombre de dans l'ordre décroissant.
- S'il y a deux chaînes avec le même nombre, la première apparition vient en premier
- Tous les doublons doivent être supprimés, un seul de chaque chaîne doit figurer dans la liste finale
j'ai actuellement
list({}.fromkeys(sorted(s,key=lambda y:-s.count(y))))
J'ai remarqué des réponses comme set
mais cela change arbitrairement l'ordre, ce que je ne veux pas.
Edit : Désolé pour la mauvaise qualité avant. Je l'avais fouetté juste avant de dormir et j'étais assez fatigué. Ce n'est pas pour StackOverflow car j'essaie de réduire au maximum la taille de ce code. J'ai essayé de chercher des réponses mais je n'ai rien trouvé.
Réponses
44 octets
sorted({}.fromkeys(s),key=s.count,reverse=1)
Essayez-le en ligne !
Une amélioration de ce qui suit, en remplaçant la clé par un intégré plutôt qu'un lambda
, et en utilisant reverse
pour échanger les comparaisons. Nous aimerions plutôt le faire [::-1]
sur le résultat final, mais cela ne fait pas les bons tie-breaks stables.
47 octets
sorted({}.fromkeys(s),key=lambda y:-s.count(y))
Essayez-le en ligne !
Une simple transposition de votre code, en déplaçant votre {}.fromkeys
astuce de déduplication avant le tri. Étant donné que le tri se transforme en une liste, en extrayant les clés d'un dictionnaire, cela enregistre l' list()
appel de l'original.
Pour plus de commodité, le code d'origine est :
53 octets
list({}.fromkeys(sorted(s,key=lambda y:-s.count(y))))
Essayez-le en ligne !