我有以下软件包列表,我需要根据bad_version选择其中一个。示例:
bad_version = '1.55'
list = ['1.54', '1.56', '1.57', '1.58', '1.59', '1.60', '1.61', '2.1.3', '2.5.1', '2.9.8', '3.5.0', '3.5.1', '3.6.0', '3.6.1', '3.7.0', '3.7.0-rc1', '3.7.1']
输出应为'1.61'
。但是,如果bad_version是1.61
,则由于bad_version是列表中的最后一个次要版本,它将选择下一个主要'2.9.8'
的最大值。同样,如果bad_version为0.55
,它将选择下一个专业的最大值1.61
。我将如何在python中做到这一点
答案 0 :(得分:1)
我愿意
def major(version):
return int(version.split('.')[0])
def next_major_version(bad_version, l_versions):
bad_maj = major(bad_version)
offset = 0
candidates = []
while candidates == []:
candidates = [v for v in l_versions if major(v) == bad_maj + offset]
offset += 1
if candidates[-1] == bad_version:
candidates = [v for v in l_versions if major(v) == bad_maj + offset]
return candidates[-1]
l_versions = ['1.54', '1.56', '1.57', '1.58', '1.59', '1.60', '1.61', '2.1.3', '2.5.1', '2.9.8', '3.5.0', '3.5.1', '3.6.0', '3.6.1', '3.7.0', '3.7.0-rc1', '3.7.1']
# returns '1.61'
next_major_version('1.55', l_versions)
# returns '2.9.8'
next_major_version('1.61', l_versions)
# returns '1.61'
next_major_version('0.55', l_versions)
唯一的问题是,如果while
高于列表中的最高版本,则bad_version
不会终止。因此,只有在版本列表完整的情况下,这才起作用。