Python 中日志文件的重新排序
假设我们有一个日志数组。在该数组中,每个条目都是一个以空格分隔的单词字符串。每个日志中的第一个单词都是一个字母数字标识符。然后,存在不同类型的字符串,如下所示:
- 标识符后的每个单词仅包含小写字母;
- 标识符后的每个单词仅包含数字。
我们将这两种类型的日志分别称为字母日志和数字日志。并且保证每个日志在其 ID 之后至少包含一个单词。
我们必须重新排序日志,以便所有字母日志都位于任何数字日志之前。字母日志按字典顺序排序(忽略标识符),如果出现相同的情况则使用标识符。最后,数字日志应按其原始顺序排列。因此,我们必须返回日志的最终顺序。
因此,如果输入类似于 logs = ["dig1 9 2 5 2","let1 art can","dig2 4 8","let2 own kit dig","let3 art zero"],则输出将为 ["let1 art can","let3 art zero","let2 own kit dig","dig1 9 2 5 2","dig2 4 8"]
为了解决这个问题,我们将遵循以下步骤:
- words := 一个新的列表
- nums := 一个新的列表
- 对于 logs 中的每个日志,执行以下操作:
- s := 日志的单词列表
- 如果第二个单词是数字,则
- 将日志插入到 nums 列表的末尾
- 否则,
- 将 s 中的每个元素用空格分隔并连接起来,然后插入到 words 数组的末尾
- words = 然后按字典顺序对 words 数组进行排序
- words := 将 words 数组的每个元素用空格分隔并连接起来,并创建一个字符串列表
- 合并两个列表 words 和 nums,然后返回
让我们看下面的实现来更好地理解:
示例
class Solution: def reorderLogFiles(self, logs): words = [] nums = [] for log in logs: s = log.split() if s[1].isdigit(): nums.append(log) else: words.append((s[0], ' '.join(s[1:]))) words = sorted(words, key=lambda x: (x[1],x[0])) words = [' '.join(w) for w in words] return words + nums ob = Solution() print(ob.reorderLogFiles(["dig1 9 2 5 2","let1 art can","dig2 4 8","let2 own kit dig","let3 art zero"]))
输入
["dig1 9 2 5 2","let1 art can","dig2 4 8","let2 own kit dig","let3 art zero"]
输出
['let1 art can', 'let3 art zero', 'let2 own kit dig', 'dig1 9 2 5 2', 'dig24 8']
广告