使用字符串和整数对列表进行排序

2024-10-06 06:26:02 发布

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

我很难找到任何问题和答案

我有一个单词列表如下:

['ABC11-2', 'BCD14-1', 'ABC09-1', 'ABC14-1', 'BCD11-2']

我需要这样分类

['ABC09-1', 'ABC14-1', ABC11-2', 'BCD14-1', 'BCD11-2']

但是使用sorted()或sort()我得到

['ABC09-1','ABC11-2', ABC14-1', 'BCD11-2', 'BCD14-1']

我需要先按单元名称排序,然后是学期,然后是单元号

谢谢


Tags: 答案名称列表排序分类sort单词单元
2条回答

从问题上看,单元名称开始时是3个字符,学期结束时是1个字符。假设是这种情况,那么您可以重新排列课程名称中的字符,并将其传递给sorted()key参数。这非常简单,您可以使用lambda函数进行转换

lst = ['ABC11-2', 'BCD14-1', 'ABC09-1', 'ABC14-1', 'BCD11-2']

print(sorted(lst, key=lambda s: s[:3] + s[-1] + s[3:-1]))

产出:

['ABC09-1', 'ABC14-1', 'ABC11-2', 'BCD14-1', 'BCD11-2']

您可以使用key参数进行排序,这将指定排序顺序:

lst = ['ABC11-2', 'BCD14-1', 'ABC09-1', 'ABC14-1', 'BCD11-2']

def f(x):
    x = x.split('-')
    return x[0][:3], int(x[1]), int(x[0][3:])
    
print(sorted(lst, key=f))
# ['ABC09-1', 'ABC14-1', 'ABC11-2', 'BCD14-1', 'BCD11-2']

相关问题 更多 >