Comparación del número de versión en Python

Quiero escribir uncmp-como función que compara dos números de versión y devuelve-1, 0o1 Basado en sus valuses comparados.

Regreso-1 Si la versión A es más antigua que la versión BRegreso0 Si las versiones A y B son equivalentes.Regreso1 Si la versión A es más nueva que la versión B

Se supone que cada subsección se interpreta como un número, por lo tanto, 1.10> 1.1.

Las salidas de funciones deseadas son

mycmp('1.0', '1') == 0
mycmp('1.0.0', '1') == 0
mycmp('1', '1.0.0.1') == -1
mycmp('12.10', '11.0.0.0.0') == 1
...

Y aquí está mi implementación, abierta a mejoras:

def mycmp(version1, version2):
    parts1 = [int(x) for x in version1.split('.')]
    parts2 = [int(x) for x in version2.split('.')]

    # fill up the shorter version with zeros ...
    lendiff = len(parts1) - len(parts2)
    if lendiff > 0:
        parts2.extend([0] * lendiff)
    elif lendiff < 0:
        parts1.extend([0] * (-lendiff))

    for i, p in enumerate(parts1):
        ret = cmp(p, parts2[i])
        if ret: return ret
    return 0

Estoy usando Python 2.4.5 por cierto. (instalado en mi lugar de trabajo ...).

Aquí hay una pequeña 'suite de prueba' que puedes usar

assert mycmp('1', '2') == -1
assert mycmp('2', '1') == 1
assert mycmp('1', '1') == 0
assert mycmp('1.0', '1') == 0
assert mycmp('1', '1.000') == 0
assert mycmp('12.01', '12.1') == 0
assert mycmp('13.0.1', '13.00.02') == -1
assert mycmp('1.1.1.1', '1.1.1.1') == 0
assert mycmp('1.1.1.2', '1.1.1.1') == 1
assert mycmp('1.1.3', '1.1.3.000') == 0
assert mycmp('3.1.1.0', '3.1.2.10') == -1
assert mycmp('1.1', '1.10') == -1

Respuestas a la pregunta(16)

Su respuesta a la pregunta