这个问题在这里已有答案:
我有一个包含这样的标签的列表:
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,这就是为什么我需要在每个部分上显式排序。我的问题是可能有一个字符串部分后跟数字。
你可以使用sorted
和key
。
您确实需要使用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']