2024-09-19 11:56:28 发布
网友
我有一个包含版本字符串的列表,例如:
versions_list = ["1.1.2", "1.0.0", "1.3.3", "1.0.12", "1.0.2"]
我想把它分类,结果是这样的:
versions_list = ["1.0.0", "1.0.2", "1.0.12", "1.1.2", "1.3.3"]
数字的优先顺序显然应该是从左到右,并且应该是降序的。所以1.2.3在2.2.3之前,2.2.2在2.2.3之前。
1.2.3
2.2.3
2.2.2
在Python中如何实现这一点?
也可以使用标准库的distutils.version模块:
distutils.version
from distutils.version import StrictVersion versions = ["1.1.2", "1.0.0", "1.3.3", "1.0.12", "1.0.2"] versions.sort(key=StrictVersion)
给你:
['1.0.0', '1.0.2', '1.0.12', '1.1.2', '1.3.3']
它还可以处理带有预发布标记的版本,例如:
versions = ["1.1", "1.1b1", "1.1a1"] versions.sort(key=StrictVersion)
["1.1a1", "1.1b1", "1.1"]
文档:https://github.com/python/cpython/blob/3.2/Lib/distutils/version.py#L101
拆分每个版本字符串以将其作为整数列表进行比较:
versions_list.sort(key=lambda s: map(int, s.split('.')))
为您的列表提供:
在Python3中,map不再返回list,因此我们需要wrap it in a ^{} call。
map
list
versions_list.sort(key=lambda s: list(map(int, s.split('.'))))
在这里映射的另一种方法是list comprehension。请参阅this post了解更多列表上的理解。
versions_list.sort(key=lambda s: [int(u) for u in s.split('.')])
natsort提出“自然排序”;wich非常直观地工作(在Python 3中)
from natsort import natsorted versions = ["1.1.2", "1.0.0", "1.3.3", "1.0.12", "1.0.2"] natsorted(versions)
给予
但它也适用于带有版本号的完整包名称:
versions = ['version-1.9', 'version-2.0', 'version-1.11', 'version-1.10'] natsorted(versions)
['version-1.9', 'version-1.10', 'version-1.11', 'version-2.0']
也可以使用标准库的
distutils.version
模块:给你:
它还可以处理带有预发布标记的版本,例如:
给你:
文档:https://github.com/python/cpython/blob/3.2/Lib/distutils/version.py#L101
拆分每个版本字符串以将其作为整数列表进行比较:
为您的列表提供:
在Python3中,} call 。
map
不再返回list
,因此我们需要wrap it in a ^{在这里映射的另一种方法是list comprehension。请参阅this post了解更多列表上的理解。
natsort提出“自然排序”;wich非常直观地工作(在Python 3中)
给予
但它也适用于带有版本号的完整包名称:
给予
相关问题 更多 >
编程相关推荐