从python中的列表中找到软件包的最大次要版本

时间:2019-04-10 16:30:52

标签: python python-3.x version

我有以下软件包列表,我需要根据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中做到这一点

1 个答案:

答案 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不会终止。因此,只有在版本列表完整的情况下,这才起作用。