我对蟒蛇还不熟悉。手头的任务是在特定目录中的生成列表中查找最新的生成。
我的代码如下:

    command = 'ls ' + self.build_path
    stdin, stdout, stderr = self.ssh.exec_command(command)
    builds_list = stdout.read()

    arrBuild = builds_list.split('\n')
    joined = "|".join(arrBuild)
    self.latest_packages['relayws'] = max(re.findall("mybuild-relayws_[0-9]+.[0-9].[0-9]+-[0-9]_amd64.deb", joined))

现在我的问题是,“mybuild-relayws_44.0.99-1_amd64.deb”总是被认为是最新的,当我在列表中有“mybuild-relayws_44.0.101-1_amd64.deb”时。
即:
max(['mybuild-relayws_44.0.99-1_amd64.deb', 'mybuild-relayws_44.0.101-1_amd64.deb'])始终返回mybuild-relayws_44.0.99-1_amd64.deb.
我知道max()在这里使用的是字符串比较,从这个意义上说,它返回的是正确的。然而,在我的例子中,我期望我的build-relayws_44.0.101-1_amd64.deb
我的问题是:
如何更改上述代码中的max()函数,从而返回mybuild-relayws_44.0.101-1_amd64.deb
max函数中的key=lambda在这里有用吗?如果是,如何将其应用于此代码。
提前谢谢。

最佳答案

您需要从relayws获取版本:

def version(relayws):
    return map(int, relayws.split('_')[1].replace('-', '.').split('.'))

然后您可以通过键找到最大值:
latest = max(builds, key=version)

关于python - 比较两个字符串时,Python max()函数无法提供正确的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35879819/

10-12 03:06