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

เรียงลำดับข้อมูลใหม่ในไฟล์บันทึกใน Python


สมมติว่าเรามีอาร์เรย์บันทึก ในอาร์เรย์นั้นแต่ละรายการเป็นสตริงคำที่คั่นด้วยช่องว่าง คำแรกในแต่ละบันทึกคือตัวระบุที่เป็นตัวอักษรและตัวเลข จากนั้นจะมีสตริงประเภทต่างๆ ดังต่อไปนี้ −

  1. แต่ละคำหลังรหัสจะประกอบด้วยตัวพิมพ์เล็กเท่านั้น
  2. แต่ละคำหลังรหัสจะประกอบด้วยตัวเลขเท่านั้น

เราจะเรียกบันทึกทั้งสองประเภทนี้ว่าบันทึกจดหมายและบันทึกตัวเลขตามลำดับ และ ti รับประกันว่าบันทึกแต่ละรายการมีคำหลังรหัสอย่างน้อยหนึ่งคำ

เราต้องเรียงลำดับบันทึกใหม่เพื่อให้บันทึกตัวอักษรทั้งหมดอยู่ก่อนบันทึกหลัก และบันทึกของจดหมายจะถูกเรียงลำดับโดยไม่สนใจตัวระบุ โดยใช้ตัวระบุในกรณีที่มีความสัมพันธ์กัน สุดท้าย ควรวางบันทึกตัวเลขในลำดับเดิม ดังนั้นเราจึงต้องส่งคืนลำดับสุดท้ายของบันทึก

ดังนั้น หากอินพุตเป็นเหมือน logs =["dig1 9 2 5 2","let1 art can","dig2 4 8","let2 own kit dig","let3 art zero"] ผลลัพธ์จะเป็น [ "let1 art can","let3 art zero","let2 own kit dig","dig1 9 2 52","dig2 4 8"]

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

  • คำ :=รายการใหม่
  • nums :=รายการใหม่
  • สำหรับบันทึกการเข้าสู่ระบบแต่ละครั้ง ให้ทำ
    • s :=รายการคำในบันทึก
    • ถ้าคำที่สองเป็นตัวเลข
      • แทรกบันทึกที่ส่วนท้ายของ nums
    • มิฉะนั้น
      • รวมแต่ละองค์ประกอบของ s โดยคั่นด้วยการเว้นวรรคและแทรกลงในอาร์เรย์คำที่ส่วนท้าย
    • words =จากนั้นจัดเรียงคำอาร์เรย์ lexicographically
  • words :=เข้าร่วมแต่ละองค์ประกอบของอาร์เรย์คำโดยคั่นด้วยการเว้นวรรคและสร้างรายการสตริง
  • รวมสองรายการคำและ nums แล้วกลับ

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

class Solution:
   def reorderLogFiles(self, logs):
      words = []
      nums = []
      for log in logs:
         s = log.split()
         if s[1].isdigit():
            nums.append(log)
         else:
            words.append((s[0], ' '.join(s[1:])))
            words = sorted(words, key=lambda x: (x[1],x[0]))
            words = [' '.join(w) for w in words]
      return words + nums
ob = Solution()
print(ob.reorderLogFiles(["dig1 9 2 5 2","let1 art can","dig2 4
8","let2 own kit dig","let3 art zero"]))

อินพุต

["dig1 9 2 5 2","let1 art can","dig2 4 8","let2 own kit dig","let3 art zero"]

ผลลัพธ์

['let1 art can', 'let3 art zero', 'let2 own kit dig', 'dig1 9 2 5 2', 'dig24 8']