gpt4 book ai didi

比较两个字符串时,Python max() 函数不会给出正确的结果

转载 作者:行者123 更新时间:2023-11-28 22:38:11 25 4
gpt4 key购买 nike

我是 Python 新手。手头的任务是在特定目录的构建列表中找到最新的构建。

我的代码是这样的:

    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.101-1_amd64.deb”时,“mybuild-relayws_44.0.99-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() 在这里使用字符串比较,从这个意义上说它返回正确。但是,就我而言,我期待 mybuild-relayws_44.0.101-1_amd64.deb

我的问题是:

  1. 如何更改上面代码中的 max() 函数,它会返回 mybuild-relayws_44.0.101-1_amd64.deb 作为结果
  2. max 函数中的 key=lambda 在这里有用吗?如果是,如何将其应用于此代码。

提前致谢。

最佳答案

您还没有给出任何关于您期望构建如何排序的规则。假设您希望根据以下条件订购它们:

  • firebet-relayws_44.0.99-1_amd64.deb => 44.0.99-1
  • 然后 44.0.99-1 => 一个数字序列 (44, 0, 99, 1)
  • 我们根据该顺序排序。

然后尝试这样的事情:

def get_version(txt):
# extract eg 44.0.99-1
version_data = txt.split("_")[1]

# split into 44.0.99 and 1
version, release = version_data.split("-")

# convert them to a list of numbers
return [int(x) for x in version.split(".")] + [int(release)]

然后,例如:

>>> print(get_version("firebet-relayws_44.0.99-1_amd64.deb"))
[44, 0, 99, 1]

现在我们将它作为关键函数传递给 max

>>> print(max(['mybuild-relayws_44.0.99-1_amd64.deb', 'mybuild-relayws_44.0.101-1_amd64.deb'], key=get_version))
mybuild-relayws_44.0.101-1_amd64.deb

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com