如何在Python中对版本标签列表进行排序[重复]

问题描述 投票:1回答:1

这个问题在这里已有答案:

我有一个包含这样的标签的列表:

list = ['1.0.0','1.0.1','1.1.1','1.1.1.abc','2.20.11','2.0.10.abc2']

我想根据第一个数字,然后是第二个数字,然后是第三个数字对其进行排序。

输出应该是这样的:

['1.0.0','1.0.1','1.1.1','1.1.1.abc','2.0.10.abc2','2.20.11']

我试过用这样的排序:

list.sort(key=lambda x: (x[:x.find('.')], int(x[x.find('.')+1:x.index('.',x.find('.')+1)]) ) )

我可以根据前两个数字进行排序就好了,这是困扰我的第三个数字,因为可能有一个字符串部分,而且数字可能是两位数或更多,我不知道如何排除最后一个字符串部分,只对数字排序。

有什么想法吗?

编辑

默认排序的问题是,我不能正确地对所有部分进行排序,例如,由于某些原因,它会在4.9.2之前放置4.35.7,这就是为什么我需要在每个部分上显式排序。我的问题是可能有一个字符串部分后跟数字。

python versioning
1个回答
2
投票

你可以使用sortedkey

您确实需要使用str.split将字符串拆分为标记。这将允许您依赖列表排序。

虽然,您需要首先将数字串转换为int以获得预期结果,否则数字将按字母顺序排序,而不是按商业顺序排序。

l = ['1.0.0','1.0.1','1.1.1','1.1.1.abc','2.20.11','2.0.10.abc2']
sorted_l = sorted(l, key=lambda x: [int(i) if i.isdigit() else i for i in x.split('.')])

产量

['1.0.0', '1.0.1', '1.1.1', '1.1.1.abc', '2.0.10.abc2', '2.20.11']
© www.soinside.com 2019 - 2024. All rights reserved.