versiones sintaxis que python27 plataforma filosofia caracteristicas actual python

sintaxis - version actual de python



Ordenar una lista de nĂºmeros separados por puntos, como las versiones de software (4)

Divide cada cadena de versión para compararla como una lista de enteros:

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

Da, para su lista:

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

En Python3 el map ya no devuelve una list , por lo que debemos envolverlo en una list llamadas .

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

La alternativa para mapear aquí es una lista de comprensión . Consulte esta publicación para obtener más información sobre la lista de comprensiones.

versions_list.sort(key=lambda s: [int(u) for u in s.split(''.'')])

Tengo una lista que contiene cadenas de versiones, como cosas:

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

Me gustaría ordenarlo, por lo que el resultado sería algo como esto:

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

El orden de precedencia para los dígitos debería ser, obviamente, de izquierda a derecha, y debería ser descendente. Entonces 1.2.3 viene antes de 2.2.3 y 2.2.2 viene antes de 2.2.3 .

¿Cómo hago esto en Python?


También puede usar el módulo distutils.version de la biblioteca estándar:

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)

Te dio:

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

También puede manejar versiones con etiquetas de prelanzamiento, por ejemplo:

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

Te dio:

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

Documentación: https://github.com/python/cpython/blob/3.2/Lib/distutils/version.py#L101


También resolví esta pregunta usando Python, aunque mi versión hace algunas cosas adicionales, aquí está mi código:

def answer(l): list1 = [] # this is the list for the nested strings for x in l: list1.append(x.split(".")) list2 = [] # this is the same list as list one except everything is an integer in order for proper sorting for y in list1: y = map(int, y) list2.append(y) list3 = sorted(list2) #this is the sorted list of of list 2 FinalList = [] # this is the list that converts everything back to the way it was for a in list3: a = ''.''.join(str(z) for z in a) FinalList.append(a) return FinalList

Para las versiones existen tres cosas; Mayor, menor y la revisión. Lo que hace esto es que lo organiza de modo que ''1'' vendrá antes de ''1.0'' que vendrá antes de ''1.0.0'' . Además, otra ventaja, no es necesario importar ninguna biblioteca en el caso de que no la tenga, y funciona con las versiones anteriores de Python, esta fue específicamente diseñada para la Versión 2.7.6. De todos modos, aquí hay algunos ejemplos:

Inputs: (string list) l = ["1.1.2", "1.0", "1.3.3", "1.0.12", "1.0.2"] Output: (string list) ["1.0", "1.0.2", "1.0.12", "1.1.2", "1.3.3"] Inputs: (string list) l = ["1.11", "2.0.0", "1.2", "2", "0.1", "1.2.1", "1.1.1", "2.0"] Output: (string list) ["0.1", "1.1.1", "1.2", "1.2.1", "1.11", "2", "2.0", "2.0.0"]

Si tienes alguna pregunta, ¡solo comenta la respuesta!


natsort propone "clasificación natural"; que funciona de manera muy intuitiva (en Python 3)

from natsort import natsorted versions = ["1.1.2", "1.0.0", "1.3.3", "1.0.12", "1.0.2"] natsorted(versions)

da

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

pero funciona igual en los nombres completos de los paquetes con el número de versión:

versions = [''version-1.9'', ''version-2.0'', ''version-1.11'', ''version-1.10''] natsorted(versions)

da

[''version-1.9'', ''version-1.10'', ''version-1.11'', ''version-2.0'']