gpt4 book ai didi

python - 如何在Python中对版本标签列表进行排序

转载 作者:行者123 更新时间:2023-12-01 01:12:46 26 4
gpt4 key购买 nike

我有一个包含如下标签的列表:

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.35.7 放在 4.9.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']

关于python - 如何在Python中对版本标签列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54679544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com