从 python 中的列表中查找包的最大次要版本
Find the maximum minor version of a package from a list in python
我有以下软件包列表,我需要根据 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
,因为它是列表中的最后一个次要版本,它将选择下一个主要版本的最大值,即 '2.9.8'
。同样,如果 bad_version 是 0.55
,它将选择下一个专业的最大值,即 1.61
。在 python
中我该怎么做
我会选择
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)
唯一的问题是如果 bad_version
高于列表中的最高版本,while
不会终止。所以这只有在版本列表以某种方式完整时才有效。
我有以下软件包列表,我需要根据 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
,因为它是列表中的最后一个次要版本,它将选择下一个主要版本的最大值,即 '2.9.8'
。同样,如果 bad_version 是 0.55
,它将选择下一个专业的最大值,即 1.61
。在 python
我会选择
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)
唯一的问题是如果 bad_version
高于列表中的最高版本,while
不会终止。所以这只有在版本列表以某种方式完整时才有效。