LeetCode题reorderLogFiles的lambda排序与split函数用法疑问
问题解答
1. 排序逻辑与lambda实现规则
Python列表的sort()方法的key参数作用是:为列表中的每个元素生成一个排序基准值,排序时会按照基准值的大小升序排列元素。
你疑问的这行代码中,lambda匿名函数会为每一条字母日志x返回一个二元组作为排序基准:(x.split(' ')[1:], x.split(' ')[0])
Python中对元组排序的规则是按位置依次比较:
- 先比较元组第一个元素的大小,如果不一样直接按这个结果排序
- 如果第一个元素相等,再比较第二个元素的大小
这个逻辑完全匹配题目的字母日志排序要求:
- 优先按标识符之后的内容字典序升序排列(对应元组第一个值
x.split(' ')[1:],即切分后除第一个元素外的所有内容) - 若内容完全相同,再按标识符字典序升序排列(对应元组第二个值
x.split(' ')[0],即切分后的第一个元素)
举个实际例子:
现有两条字母日志"let1 art can"、"let2 art can",拆分后:
- 第一条的排序基准是
(["art", "can"], "let1") - 第二条的排序基准是
(["art", "can"], "let2")
因为第一个元素相等,比较第二个元素"let1" < "let2",所以"let1 art can"排在前面。
2. split函数的作用与使用原因
split(" ")的作用是把字符串按空格作为分隔符,切割成字符串列表。本题中所有日志的格式都是统一的:[标识符] [内容项1] [内容项2] ...,所以用空格切割能精准拆分出标识符和内容部分。
两处使用的原因分别是:
- 循环中的
log.split(" "):拆分后取第二个元素split[1]判断是否为数字,以此区分数字日志和字母日志,将两类日志分开存储。 - sort逻辑中的
x.split(" "):拆分后分别获取内容部分[1:]和标识符[0],生成前面说的排序基准元组,满足题目排序规则。
内容的提问来源于stack exchange,提问作者user13765183
相关产品推荐
相关产品推荐

