背景:
有時候想下載個軟件,看到列表里有一大堆的版本,一眼想識別哪個版本是最新的還真有些難度,例如:
1.11.2 和1.4.2 這種,乍一看好像后者的版本更新一點的樣子,實際上要按.分割后每個部分各自比較,實在太麻煩了
看看用代碼實現起來會不會容易一點
思路:
1、先將不同長度的版本號通過補0變成相同的長度,方便比較(否則無法區別3.9.1和3.9)
2、對每個.分割的部分轉為整數進行比較大小,任意部分有大小區別則不再比較
3、如果比較到最后一部分都相等,那說明是同個版本,如(3.9和3.9.0)
4、為了返回版本原值,所以另外加了個變量保存補0后的版本
# coding:utf-8
def compare(a: str, b: str):
'''比較兩個版本的大小,需要按.分割后比較各個部分的大小'''
lena = len(a.split('.')) # 獲取版本字符串的組成部分
lenb = len(b.split('.'))
a2 = a + '.0' * (lenb-lena) # b比a長的時候補全a
b2 = b + '.0' * (lena-lenb)
print(a2, b2)
for i in range(max(lena, lenb)): # 對每個部分進行比較,需要轉化為整數進行比較
if int(a2.split('.')[i]) > int(b2.split('.')[i]):
return a
elif int(a2.split('.')[i]) < int(b2.split('.')[i]):
return b
else: # 比較到最后都相等,則返回第一個版本
if i == max(lena, lenb)-1:
return a
versions = ['1.01', '2.3', '2.12', '2.1.0', '0.0.01.3', '2.154']
last = '0.0' # 給個初始值進行比較
for version in versions:
last = compare(last, version) # 每次將較大的版本取出,留給下次比較
print(last)
PS:lenb < lena時, ‘.0’乘以負數,結果是空字符串