从python中的列表中查找包的最大次要版本
我有以下软件包列表,我需要根据bad_版本选择其中一个。例如:从python中的列表中查找包的最大次要版本,python,python-3.x,version,Python,Python 3.x,Version,我有以下软件包列表,我需要根据bad_版本选择其中一个。例如: bad_version = '1.55' 输出应为'1.61'。但是,如果坏版本是1.61,因为它是列表中的最后一个次要版本,它将选择下一个主要版本的最大值,即'2.9.8'。此外,如果bad_版本为0.55,它将选择下一个主要版本的最大值,即1.61。我将如何在python中实现这一点 def major(version): return int(version.split('.')[0]) def next_majo
bad_version = '1.55'
输出应为'1.61'
。但是,如果坏版本是1.61
,因为它是列表中的最后一个次要版本,它将选择下一个主要版本的最大值,即'2.9.8'
。此外,如果bad_版本为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)
唯一的问题是,如果
坏版本
高于列表中的最高版本,则while
不会终止。因此,只有在版本列表以某种方式完整的情况下,这才有效。到目前为止,您尝试了什么?请张贴您的密码。什么不起作用?是您一直正确排序的版本列表,还是有可能未排序?这对我心目中的解决方案有很大的影响,因为对版本号进行排序并不简单…@月它肯定会被排序到列表中,谢谢你的问题。离题:你不应该给list
指定一个特定的列表,因为在那之后,l2=list({2,3})
会引起类型错误,这只是一个变量,但可以被称为其他任何东西,谢谢你的便条,就像一个符咒,非常感谢你@month!!发现另一个错误:如果bad_version
是主要版本系列的最后一个,并且没有major(v)==major(bad_version)+1
的版本,我想这将引发索引器。。。示例:bad_version='1.51'
和l_versions=['1.41'、'1.51'、'3.0'、'3.1']
哦,是的,没问题,我可以处理,谢谢你的提醒。我现在遇到了的问题,而没有终止,如何解决这个问题?@JauL你能给我引起这个问题的版本号列表吗?
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)