对点分隔的数字列表进行排序,例如软件版本

我有一个包含版本字符串的列表,例如:


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。


如何在Python中执行此操作?


慕仙森
浏览 423回答 3
3回答

一只甜甜圈

拆分每个版本字符串,以将其作为整数列表进行比较:versions_list.sort(key=lambda s: map(int, s.split('.')))给出,作为您的清单:['1.0.0', '1.0.2', '1.0.12', '1.1.2', '1.3.3']在Python3中map不再返回a list,因此我们需要将其包装在list调用中。versions_list.sort(key=lambda s: list(map(int, s.split('.'))))映射的替代方法是列表理解。有关列表理解的更多信息,请参见这篇文章。versions_list.sort(key=lambda s: [int(u) for u in s.split('.')])

缥缈止盈

natsort提出“自然排序”;wich非常直观(在Python 3中)from natsort import natsortedversions = ["1.1.2", "1.0.0", "1.3.3", "1.0.12", "1.0.2"]natsorted(versions)给['1.0.0', '1.0.2', '1.0.12', '1.1.2', '1.3.3']但在带有版本号的完整软件包名称上也可以正常使用: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']
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python