目录

Python下实现版本号比较

目录

比如一个产品在某个版本之后新增了某个特性,那么在用目标特性时,版本比较是必需的。

假设版本号由数字和点符号构成,格式为a.b.c,那么在Python下可以轻松实现。

下面是在IPython下的示例:

In [1]: v1 = '3.4.6'

In [2]: t1 = tuple(int(val) for val in v1.split('.'))

In [3]: t1
Out[3]: (3, 4, 6)

In [4]: v2 = '3.2.0'

In [5]: t2 = tuple(int(val) for val in v2.split('.'))

In [6]: t2
Out[6]: (3, 2, 0)

In [7]: t1 > t2
Out[7]: True

将版本号的数字解析为一个元组,利用元组的原生比较,判断版本的高低。

元组或列表的原生比较规则是逐位比较:

  • 如果元素类型相同,进行比较,返回结果
  • 如果元素类型不同,检查二者是否为数字
    • 如果均是数字,执行必要的强制数字类型转换,然后比较(个人理解是不同的数字类型,比如int和float)
    • 如果其中一个元素是数字,则另一个元素大,(数字在类型上是最小的)
    • 否则,按类型名字的字母表顺序进行比较

如果其中一个元组先到达末尾,则长度更长的元组为更大的一方;如果元组长度相同,对应位置的元素也相同,那么两个元组相等。


参考

https://www.tutorialspoint.com/python/tuple_cmp.htm

https://www.tutorialspoint.com/python/list_cmp.htm