Python 中日志文件的重新排序


假设我们有一个日志数组。在该数组中,每个条目都是一个以空格分隔的单词字符串。每个日志中的第一个单词都是一个字母数字标识符。然后,存在不同类型的字符串,如下所示:

  1. 标识符后的每个单词仅包含小写字母;
  2. 标识符后的每个单词仅包含数字。

我们将这两种类型的日志分别称为字母日志和数字日志。并且保证每个日志在其 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']

更新于:2020年7月6日

345 次浏览

启动你的职业生涯

完成课程获得认证

开始
广告