使用 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:=一个新列表
对于名字中的每个名字,做
newname:=nameconcatenate'('concatenatedic[name]concatenate')'
当dic中存在newname时,请执行
dic[新名称]:=1
在res末尾插入newname
dic[名称]:=dic[名称]+1
newname:=nameconcatenate'('concatenatedic[name]concatenate')'
dic[名称]:=dic[名称]+1
在res末尾插入名称
如果名称不在dic中,则
否则,
返回资源
让我们看看以下实现以获得更好的理解-
示例
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']