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 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.