对语义版本的python列表进行排序

2024-04-29 00:04:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个语义代码版本列表,我想根据semver对其进行排序。以下是默认排序不正确的示例:

['0.0.1', '0.0.2', '0.1.0', '0.10.0', '0.11.0', '0.12.0', '0.13.0', '0.13.1', '0.13.2', '0.14.0', '0.15.0', '0.16.0', '0.17.0', '0.18.0', '0.19.0', '0.2.0']

“0.2.0”应位于“0.10.0”之前。我知道有语义库,但没有看到任何关于如何排序的示例,而是检查语义版本的有效性


Tags: 代码版本示例列表排序语义semver有效性
2条回答

应使用以下代码执行此操作:

a = ['0.0.1', '0.0.2', '0.1.0', '0.10.0', '0.11.0', '0.12.0', '0.13.0', '0.13.1', '0.13.2', '0.14.0', '0.15.0', '0.16.0', '0.17.0', '0.18.0', '0.19.0', '0.2.0']

a.sort(key = lambda x: [int(y) for y in x.split('.')])

print(a)

见结果:

['0.0.1', '0.0.2', '0.1.0', '0.2.0', '0.10.0', '0.11.0', '0.12.0', '0.13.0', '0.13.1', '0.13.2', '0.14.0', '0.15.0', '0.16.0', '0.17.0', '0.18.0', '0.19.0']

即使列表中包含“0.12.0.1”,它也可以工作:

b = ['0.12.0.1', '0.0.1', '0.0.2', '0.1.0', '0.10.0', '0.11.0', '0.12.0', '0.13.0', '0.13.1', '0.13.2', '0.14.0', '0.15.0', '0.16.0', '0.17.0', '0.18.0', '0.19.0', '0.2.0']

b.sort(key = lambda x: [int(y) for y in x.split('.')])

print(b)

结果如下:

['0.0.1', '0.0.2', '0.1.0', '0.2.0', '0.10.0', '0.11.0', '0.12.0', '0.12.0.1', '0.13.0', '0.13.1', '0.13.2', '0.14.0', '0.15.0', '0.16.0', '0.17.0', '0.18.0', '0.19.0']

元组从左到右比较,因此将每个元素拆分为一个int元组,并将其用作键:

l = ['0.0.1', '0.0.2', '0.1.0', '0.10.0', '0.11.0', '0.12.0', '0.13.0', '0.13.1', '0.13.2', '0.14.0', '0.15.0', '0.16.0', '0.17.0', '0.18.0', '0.19.0', '0.2.0']
print(sorted(l, key=lambda version: tuple(int(n) for n in verion.split("."))))
# ['0.0.1', '0.0.2', '0.1.0', '0.2.0', '0.10.0', '0.11.0', '0.12.0', '0.13.0', '0.13.1', '0.13.2', '0.14.0', '0.15.0', '0.16.0', '0.17.0', '0.18.0', '0.19.0']

相关问题 更多 >