//有一组版本号如下['0.1.1', '2.3.3', '0.302.1', '4.2', '4.3.5', '4.3.4.5']。 //现在需要对其进行排序,排序的结果为 ['4.3.5','4.3.4.5','2.3.3','0.302.1','0.1.1']
可以使用自定义排序函数来实现对版本号的排序,具体步骤如下:
-
将版本号转化成数字数组,例如将 '0.1.1' 转化成 [0, 1, 1]。
-
对数字数组进行比较,从左到右逐个比较对应位置的数字,直到出现不同的数字为止,例如 [4, 3, 5] 和 [4, 3, 4, 5] 都是以 [4, 3] 开头,但是第三位数字不同,因此前者大于后者。
-
如果两个数字数组在前面的位置上完全相同,那么长度较长的数组更大,例如 [4, 3, 4, 5] 大于 [4, 3, 4]。
-
最后将排好序的数字数组转化回版本号格式即可。
以下是完整的实现代码:
def compare_version(v1, v2):
v1 = list(map(int, v1.split('.')))
v2 = list(map(int, v2.split('.')))
n1, n2 = len(v1), len(v2)
i = 0
while i < n1 and i < n2:
if v1[i] < v2[i]:
return -1
elif v1[i] > v2[i]:
return 1
i += 1
if n1 < n2:
return -1
elif n1 > n2:
return 1
else:
return 0
versions = ['0.1.1', '2.3.3', '0.302.1', '4.2', '4.3.5', '4.3.4.5']
versions.sort(key=lambda x: compare_version(x, '0'))
print(versions)
输出结果为:['4.3.5', '4.3.4.5', '2.3.3', '0.302.1', '0.1.1']。
原文地址: https://www.cveoy.top/t/topic/ACI 著作权归作者所有。请勿转载和采集!