【发布时间】:2022-11-23 06:14:28
【问题描述】:
我正在尝试对包含以特定格式编写的字符串的列表进行排序。
这是所述列表的示例:
numberList = ['Task #59;', 'Task #40.5; additional', 'Task #40.9; test', 'Task #40; Task Description Difference; test', 'Task #11;', 'Task #12;', 'Task #1;', 'Task #30.1;']
我目前正在使用下面这个我在网上找到并根据旧帖子修改的功能。
def natural_sort(listnum):
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)]
listnum.sort(key=alphanum_key)
return listnum
它按预期工作,期望它总是对 Task #40 进行排序;在任务#40.5 后面;和任务#40.9;。
['Task #1;', 'Task #11;', 'Task #12;', 'Task #30.1;', 'Task #40.5; additional', 'Task #40.9; test', 'Task #40; Task Description Difference; test', 'Task #59;']
但是,如果我完成任务 #40.0;它会正确排序。
['Task #1;', 'Task #11;', 'Task #12;', 'Task #30.1;', 'Task #40.0; Task Description Difference; test', 'Task #40.5; additional', 'Task #40.9; test', 'Task #59;']
有没有办法对任务 #40 进行排序?在任务#40.5 前面;和任务#40.5;而不必让它成为任务#40.0?
这是我获得代码表格的帖子的链接: Is there a built in function for string natural sort?
【问题讨论】:
-
如果它们都是那种格式,最简单的事情就是在比较之前清除
;。您不必修改实际的字符串,只需将sort与忽略最后位置的比较 lambda 一起使用即可。