使用 Python 使檔名唯一的程式


假設我們有一個名為 names 的包含 n 個字串的陣列。我們必須在檔案系統中建立 n 個目錄,這樣,在第 i 分鐘,我們將建立一個名為 names[i] 的目錄。兩個檔案不能具有相同的名稱,如果我們輸入重複的目錄名稱,系統將在其名稱後面新增字尾 (k),其中 k 是最小的正整數,使得獲得的名稱保持唯一。我們必須找到一個長度為 n 的字串陣列,其中 ans[i] 是我們在建立第 i 個目錄時將分配給它的實際名稱。

因此,如果輸入類似於 names = ["my_dir","my_dir(1)","my_new_dir","my_new_dir","abc"],則輸出將為 ['my_dir', 'my_dir(1)', 'my_new_dir', 'my_new_dir(1)', 'abc'],因為 "my_new_dir" 已經存在一次,然後在第一個之後新增一個 (1)。

為了解決這個問題,我們將遵循以下步驟:

  • dic := 一個新的對映,如果某個鍵不存在則返回 0

  • res := 一個新的列表

  • 對於 names 中的每個名稱,執行以下操作:

    • 如果名稱不在 dic 中,則

      • dic[name] := dic[name] + 1

      • 將名稱插入 res 的末尾

    • 否則,

      • newname := name 連線 '(' 連線 dic[name] 連線 ')'

      • 當 newname 存在於 dic 中時,執行以下操作:

        • dic[name] := dic[name] + 1

        • newname := name 連線 '(' 連線 dic[name] 連線 ')'

      • dic[newname] := 1

      • 將 newname 插入 res 的末尾

  • 返回 res

讓我們看看以下實現以獲得更好的理解:

示例

 即時演示

from collections import defaultdict
def solve(names):
   dic = defaultdict(int)
   res = []
   for name in names:
      if name not in dic:
         dic[name] += 1
         res.append(name)
      else:
         newname = name +'(' + str(dic[name]) + ')'
         while newname in dic:
            dic[name] += 1
            newname = name +'(' + str(dic[name]) + ')'
         dic[newname] = 1
         res.append(newname)
   return res
names = ["my_dir","my_dir(1)","my_new_dir","my_new_dir","abc"]
print(solve(names))

輸入

["my_dir","my_dir(1)","my_new_dir","my_new_dir","abc"]

輸出

['my_dir', 'my_dir(1)', 'my_new_dir', 'my_new_dir(1)', 'abc']

更新於: 2021年5月29日

1K+ 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始
廣告