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

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


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

เช่น ถ้าข้อมูลเข้าเป็น 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 = defaultdict(int) (ถ้า key ไม่มีให้คืน 0)
  • res = []
  • วนลูปแต่ละ name ใน names:
    • ถ้า name ไม่อยู่ใน dic:
      • dic[name] += 1
      • เพิ่ม name เข้า res
    • มิฉะนั้น:
      • newname = name + '(' + str(dic[name]) + ')'
      • while newname อยู่ใน dic:
        • dic[name] += 1
        • newname = name + '(' + str(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']