为了账号安全,请及时绑定邮箱和手机立即绑定

获取Python中最高的String版本号

获取Python中最高的String版本号

慕妹3146593 2021-11-16 16:17:32
我正在尝试在 Python 中获取字符串的最高版本。我试图对列表进行排序,但这当然不像 Python 对字符串表示进行排序那样容易。为此,我正在尝试使用正则表达式,但不知何故不匹配。字符串看起来像这样:topic_v10_ext2topic_v20_ext2topic_v2_ext2topic_v5_ext2topic_v7_ext2我的正则表达式看起来像这样。version_no = re.search("(?:_v([0-9]+))?", v.name)我正在考虑将名称保存在列表中并查找列表中最高的 v_xx 以返回。现在我也在两个 FOR 循环中执行此操作。它以 2*O(log(n)) 运行,我相信这不是最佳的。如何以快速简单的方式获得最高版本?
查看完整描述

2 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

您可以使用sorted或list.sort与key:


sorted(l, key=lambda x:int(x.split('_')[1][1:]), reverse=True)

['topic_v20_ext2',

 'topic_v10_ext2',

 'topic_v7_ext2',

 'topic_v5_ext2',

 'topic_v2_ext2']

  • x.split('_'): 返回 splited str,例如:['topic', 'v20', 'ext2']

  • 由于版本是排序的关键,因此选择它 x.split('_')[1]

  • SelectedV20有不需要的字符“V”,因此通过切片重新选择它[1:]以获取所有数字。

  • 最后,将数字转换为 以int进行数字排序。

此外,sorted默认情况下返回排序的升序。由于您需要降序,请使用reverse=True.


查看完整回答
反对 回复 2021-11-16
?
撒科打诨

TA贡献1934条经验 获得超2个赞

正如第一次尝试的那样,它还可以与正则表达式一起使用:


import re

v = 'topic_v7_ext2'

version_no = re.search("^[^_]*_v([0-9]+)", v)

print(version_no.group(1))

该表达式从字符串 (^) 的开头搜索模式,取所有与 _ 不同的字符(我希望你的主题不能有一个,否则两个答案都是错误的),然后找到 '_v' 并取版本号.

不需要匹配_ext,所以不管有没有!


查看完整回答
反对 回复 2021-11-16
  • 2 回答
  • 0 关注
  • 173 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信