按字符串中的数字对字符串列表排序?

2024-07-05 09:52:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的字符串列表。然后,我想按每个元素中的一个数字进行排序。sorted失败,因为它无法处理10和{}之间的顺序。我可以想象如果我使用re,我可以做到。但这并不有趣。你们有好的实施方案吗?我认为这段代码是Python3.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'

Tags: 字符串代码testre元素number列表model
3条回答

我自己也发现了类似的问题和解决办法。 Nonalphanumeric list order from os.listdir() in Python

import re
def sorted_alphanumeric(data):
    convert = lambda text: int(text) if text.isdigit() else text.lower()
    alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ] 
    return sorted(data, key=alphanum_key, reverse=True)

关键是。。。钥匙

sorted(names, key=lambda x: int(x.partition('-')[2].partition('.')[0]))

通过将字符串的那一部分分离出来并将其转换为一个int,从而将其识别为排序顺序

一些备选方案:

(1)按位置切片:

sorted(names, key=lambda x: int(x[5:-6]))

(2)子环:

^{pr2}$

(3)拆分字符(也可以通过结构分区)公司名称:

sorted(names, key=lambda x: int(x.split('-')[1].split('.')[0]))

(4)地图np.argsort公司在(1)-(3)中的任何一个:

list(map(names.__getitem__, np.argsort([int(x[5:-6]) for x in names])))

相关问题 更多 >