# -*- coding: utf-8 -*-
__author__ = 'Eggsy'
__date__ = '2019/5/6 13:36'
def compare1(a, b):
la = a.split('.')
lb = b.split('.')
f = 0
if len(la) > len(lb):
f = len(la)
else:
f = len(lb)
for i in range(f):
try:
if int(la[i]) > int(lb[i]):
return a # a > b
elif int(la[i]) == int(lb[i]):
continue
else:
return b # a < b
except IndexError as e:
if len(la) > len(lb):
return a # a > b
else:
return b # a < b
return a # a = b
def compare2(a, b):
'''比较两个版本的大小,需要按.分割后比较各个部分的大小,只能比较版本号为纯数字构成的字符串,如"1.0.10",无法比较带字母的版本号如"a1.0.1".'''
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
def compare3(a, b):
l_1 = a.split('.')
l_2 = b.split('.')
c = 0
while True:
if c == len(l_1) and c == len(l_2):
return a #相等
if len(l_1) == c:
l_1.append(0)
if len(l_2) == c:
l_2.append(0)
if int(l_1[c]) > int(l_2[c]):
return a #a>b
elif int(l_1[c]) < int(l_2[c]):
return b #a<b
c += 1
def compare4(version1, version2):
lena = len(version1.split('.')) # 获取版本字符串的组成部分
lenb = len(version2.split('.'))
a2 = version1 + '.0' * (lenb - lena) # b比a长的时候补全a
b2 = version2 + '.0' * (lena - lenb)
if a2 == b2:
return version1
nversion1 = [int(x) for x in a2.split('.')]
nversion2 = [int(x) for x in b2.split('.')]
while version1 and version2:
x, y = nversion1.pop(0), nversion2.pop(0)
if x < y:
return version2
if x > y:
return version1
def compare5(version1,version2):
if version1 == version2:
return version1
nversion1 = [int(x) for x in version1.split('.')]
nversion2 = [int(x) for x in version2.split('.')]
while nversion1 and nversion2:
x, y = nversion1.pop(0), nversion2.pop(0)
if x < y:
return version2
if x > y:
return version1
# version1或version2不完整:
if nversion1 and any(x > 0 for x in nversion1):
return version1
if nversion2 and any(x > 0 for x in nversion2):
return version2
return version1
if __name__ == '__main__':
versions = ['1.0.10','1.0.9','1.0.11','1.01', '2.3', '2.12', '2.1.0', '0.0.01.3']
tags=[u'2.0.1', u'1.0.10', u'1.0.2', u'1.0.3', u'1.0.4', u'1.0.5', u'1.0.6', u'1.0.7', u'1.0.8', u'1.0.9',u'1.0.11',u'1.0.12']
last = u'0.0' # 给个初始值进行比较
for version in tags:
last = compare1(last, version) # 每次将较大的版本取出,留给下次比较
print(last)