Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình tạo tên tệp duy nhất bằng Python

Giả sử chúng ta có một mảng gồm n chuỗi được gọi là tên. Chúng ta phải tạo n thư mục trong hệ thống tệp sao cho đến phút thứ i, chúng ta sẽ tạo một thư mục có tên là [i]. Hai tệp không được trùng tên, nếu ta nhập tên thư mục trùng lặp thì hệ thống sẽ thêm hậu tố vào tên của nó ở dạng (k), ở đây, k là số nguyên dương nhỏ nhất sao cho tên thu được là duy nhất. Chúng ta phải tìm một mảng các chuỗi có độ dài n trong đó ans [i] là tên thực sẽ được gán cho thư mục thứ i khi chúng ta tạo nó.

Vì vậy, nếu đầu vào giống như tên =["my_dir", "my_dir (1)", "my_new_dir", "my_new_dir", "abc"], thì đầu ra sẽ là ['my_dir', 'my_dir (1)' , 'my_new_dir', 'my_new_dir (1)', 'abc'] vì "my_new_dir" đã có một lần, sau đó một (1) được thêm vào sau cái đầu tiên.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • dic:=một bản đồ mới, nếu không có khóa nào đó thì trả về 0

  • res:=một danh sách mới

  • đối với mỗi tên trong tên, thực hiện

    • nếu tên không có trong dic, thì

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

      • chèn tên vào cuối res

    • nếu không,

      • newname:=name concatenate '(' concatenate dic [name] concatenate ')'

      • trong khi newname hiện diện trong dic, do

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

        • newname:=name concatenate '(' concatenate dic [name] concatenate ')'

      • dic [newname]:=1

      • chèn tên mới vào cuối res

  • trả lại res

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

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))

Đầu vào

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

Đầu ra

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