103 votes

Tri d'une liste de chaînes de version

J'ai une liste contenant des chaînes de version, telles que des choses:

 versions_list = ["1.1.2", "1.0.0", "1.3.3", "1.0.12", "1.0.2"]
 

Je voudrais le trier, donc le résultat serait quelque chose comme ceci:

 versions_list = ["1.0.0", "1.0.2", "1.0.12", "1.1.2", "1.3.3"]
 

L'ordre de priorité des chiffres doit évidemment être de gauche à droite et il doit être décroissant. Donc 1.2.3 précède 2.2.3 et 2.2.2 précède 2.2.3 .

Comment faire cela en Python?

178voto

andreypopp Points 2326

Vous pouvez également utiliser le module distutils.version de la bibliothèque standard:

 from distutils.version import StrictVersion
versions = ["1.1.2", "1.0.0", "1.3.3", "1.0.12", "1.0.2"]
versions.sort(key=StrictVersion)
 

Vous donne:

 ['1.0.0', '1.0.2', '1.0.12', '1.1.2', '1.3.3']
 

Il peut également gérer des versions avec des balises de pré-version, par exemple:

 versions = ["1.1", "1.1b1", "1.1a1"]
versions.sort(key=StrictVersion)
 

Vous donne:

 ["1.1a1", "1.1b1", "1.1"]
 

118voto

Eli Bendersky Points 82298

Fractionnez chaque chaîne de version pour la comparer sous forme de liste d'entiers:

 versions_list.sort(key=lambda s: map(int, s.split('.')))
 

Donne, pour votre liste:

  ['1.0.0', '1.0.2', '1.0.12', '1.1.2', '1.3.3']
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X