Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมสร้างชื่อไฟล์ที่ไม่ซ้ำกันโดยใช้ Python


สมมติว่าเรามีอาร์เรย์ของ n สตริงที่เรียกว่าชื่อ เราต้องสร้างไดเร็กทอรี n ไดเร็กทอรีในระบบไฟล์เพื่อที่ในนาทีที่ ith เราจะสร้างไดเร็กทอรีที่มีชื่อ name[i] ไฟล์สองไฟล์ไม่สามารถมีชื่อเดียวกันได้ หากเราป้อนชื่อไดเร็กทอรีที่ซ้ำกัน ระบบจะมีส่วนต่อท้ายชื่อของมันในรูปแบบของ (k) ในที่นี้ k เป็นจำนวนเต็มบวกที่เล็กที่สุดเพื่อให้ชื่อที่ได้รับยังคงไม่ซ้ำกัน เราต้องหาอาร์เรย์ของสตริงที่มีความยาว n โดยที่ ans[i] คือชื่อจริงที่จะถูกกำหนดให้กับไดเร็กทอรี ith เมื่อเราสร้างมันขึ้นมา

ดังนั้น หากอินพุตเป็นเหมือนชื่อ =["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 ครั้ง จึงมีการเพิ่มหนึ่ง (1) ตัวต่อจากอันแรก

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • dic :=แผนที่ใหม่ หากไม่มีคีย์บางตัว ให้คืนค่า 0

  • res :=รายการใหม่

  • สำหรับแต่ละชื่อในชื่อ ทำ

    • ถ้าชื่อไม่อยู่ใน dic แล้ว

      • dic[ชื่อ] :=dic[ชื่อ] + 1

      • ใส่ชื่อต่อท้าย res

    • มิฉะนั้น

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

      • ในขณะที่ชื่อใหม่มีอยู่ใน dic ให้ทำ

        • dic[ชื่อ] :=dic[ชื่อ] + 1

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

      • dic[ชื่อใหม่] :=1

      • ใส่ชื่อใหม่ต่อท้าย 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']