首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有混合字符串和数字的python函数

具有混合字符串和数字的python函数
EN

Stack Overflow用户
提问于 2014-02-04 06:39:21
回答 2查看 102关注 0票数 0

有谁能向我解释一下为什么有以下代码:

代码语言:javascript
复制
li = [u'ansible-1.1.tar.gz', u'ansible-1.2.1.tar.gz', u'ansible-1.2.2.tar.gz', u'ansible-1.2.3.tar.gz',
      u'ansible-1.2.tar.gz', u'ansible-1.3.0.tar.gz', u'ansible-1.3.1.tar.gz', u'ansible-1.3.2.tar.gz',
      u'ansible-1.3.3.tar.gz', u'ansible-1.3.4.tar.gz', u'ansible-1.4.1.tar.gz', u'ansible-1.4.2.tar.gz',
      u'ansible-1.4.3.tar.gz', u'ansible-1.4.4.tar.gz', u'ansible-1.4.tar.gz']

print(max(li))

返回:

代码语言:javascript
复制
ansible-1.4.tar.gz

谢谢

PS:只有数字(1.4、1.4.4等)时,它返回1.4.4。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-04 06:40:44

因为它们是按字典顺序比较的:

代码语言:javascript
复制
>>> ord('t'), ord('4')
(116, 52)

>>> 't' > '4'
True

>>> 'ansible-1.4.tar.gz' > 'ansible-1.4.4.tar.gz'
True

要得到结果的ansible-1.4.4.tar.gz,您需要传递键函数。

例如:

代码语言:javascript
复制
>>> li = [u'ansible-1.1.tar.gz', u'ansible-1.2.1.tar.gz', u'ansible-1.2.2.tar.gz', u'ansible-1.2.3.tar.gz',
...       u'ansible-1.2.tar.gz', u'ansible-1.3.0.tar.gz', u'ansible-1.3.1.tar.gz', u'ansible-1.3.2.tar.gz',
...       u'ansible-1.3.3.tar.gz', u'ansible-1.3.4.tar.gz', u'ansible-1.4.1.tar.gz', u'ansible-1.4.2.tar.gz',
...       u'ansible-1.4.3.tar.gz', u'ansible-1.4.4.tar.gz', u'ansible-1.4.tar.gz']
>>>
>>> import re
>>> def get_version(fn):
...     return list(map(int, re.findall(r'\d+', fn)))
...
>>> get_version(u'ansible-1.4.4.tar.gz')
[1, 4, 4]
>>> max(li, key=get_version)
'ansible-1.4.4.tar.gz'
票数 2
EN

Stack Overflow用户

发布于 2014-02-04 07:09:32

这是另一个很好的解决办法

Python有自己的模块pkg_resources,它具有parse_version的方法。

代码语言:javascript
复制
>>> from pkg_resources import parse_version
>>> max(li, key=parse_version)
u'ansible-1.4.4.tar.gz'
>>>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21545602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档