我有一个语义代码版本列表,我想根据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”之前。我知道有语义库,但没有看到任何如何对它们进行排序的示例,而是检查语义版本的有效性。
发布于 2020-12-16 02:54:01
下面的代码应该可以完成这项工作:
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']
发布于 2020-12-16 02:45:33
元组从左到右进行比较,因此将每个元素拆分成一个整数元组,并将其用作键:
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']
https://stackoverflow.com/questions/65311817
复制相似问题