我有下面的字符串列表。然后,我想按每个元素中的数字对它进行排序。sorted
失败了,因为它不能处理10
和3
之间的顺序。我可以想象如果我使用re
,我可以做到这一点。但它并不有趣。你们有很好的实现想法吗?我想python 3.x可以实现这段代码。
names = [
'Test-1.model',
'Test-4.model',
'Test-6.model',
'Test-8.model',
'Test-10.model',
'Test-20.model'
]
number_sorted = get_number_sorted(names)
print(number_sorted)
'Test-20.model'
'Test-10.model'
'Test-8.model'
'Test-6.model'
'Test-4.model'
'Test-1.model'
7条答案
按热度按时间mrzz3bfm1#
关键是...关键
通过将字符串的这一部分分离出来并将其转换为int,使其被识别为排序顺序。
xzabzqsa2#
一些替代方案:
(1)按位置切片:
(2)剥离子字符串:
或更好(Pandas版本〉3.9):
(3)拆分字符(也可以通过字符串分区):
(4)在(1)-(3)中的任何一个上使用np. argsort进行Map:
r1zk6ea13#
我自己也发现了一个类似的问题和解决方案。Nonalphanumeric list order from os.listdir() in Python
z3yyvxxp4#
您可以在中将
re.findall
与排序函数的key
一起使用:输出:
pw9qyyiw5#
然后做一些
klsxnrf16#
您可以将
key
参数与sorted()
一起使用来完成此操作,前提是每个字符串的格式都相同:看起来您可能希望列表反向排序(?),在这种情况下,您可以添加
reverse=True
如下:参见相关内容:关键功能
fjnneemd7#
这是一个基于正则表达式的方法。我们可以从字符串中提取测试编号,转换为int型,然后按此排序。