কম্পিউটার টিউটোরিয়াল

পাইথনে লগ ফাইলসে ডেটা রি-অর্ডার করা

মান লেই আমাদের লগসের একটি অ্যারে আছে। এই অ্যারে প্রতিটি এন্ট্রি হলো স্পেস-ডিলিমিটেড স্ট্রিং অফ ওয়ার্ডস। প্রতিটি লগের প্রথম ওয়ার্ড হলো একটি অ্যালফানিউমেরিক আইডেন্টিফায়ার। তারপর, দুটি টাইপের স্ট্রিং থাকে নিচের মত −

  1. আইডি এর পরের প্রতিটি ওয়ার্ড শুধু লোয়ারকেস লেটার দিয়ে গঠিত;
  2. আইডি এর পরের প্রতিটি ওয়ার্ড শুধু ডিজিট দিয়ে গঠিত।

আমরা এই দুটি টাইপের লগকে লেটার-লগ এবং ডিজিট-লগ বলব। এবং প্রতিটি লগে কমপক্ষে একটি ওয়ার্ড আইডির পর থাকতে হবে।

আমাদের লগগুলো রি-অর্ডার করতে হবে যাতে সব লেটার-লগ ডিজিট-লগের আগে থাকে। এবং লেটার-লগগুলো লেক্সিকোগ্রাফিক্যালি অর্ডারড থাকবে আইডেন্টিফায়ার ইগ্নোর করে, টাই হলে আইডেন্টিফায়ার ব্যবহার হবে। ফাইনালি, ডিজিট-লগগুলো তাদের আর্গিনাল অর্ডারে থাকবে। ফাইনাল অর্ডার রিটার্ন করতে হবে।

সেজন্য, যদি ইনপুট হয় 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 5 2","dig2 4 8"]

এটি সমাধান করার জন্য আমরা নিচের ধাপগুলো অনুসরণ করব −

  • words := একটি নতুন লিস্ট
  • nums := একটি নতুন লিস্ট
  • প্রতিটি log logs-এ,
    • s := log-এর ওয়ার্ড লিস্ট
    • যদি দ্বিতীয় ওয়ার্ড ডিজিট হয়, তবে
      • log nums-এ অ্যাপেন্ড
    • অন্যথায়,
      • s-এর সব এলিমেন্ট স্পেস দিয়ে জড়িয়ে words-এ অ্যাপেন্ড
    • words = words লিস্টকে লেক্সিকোগ্রাফিক্যালি সর্ট
  • words := words এর সব এলিমেন্ট স্পেস দিয়ে জড়িয়ে স্ট্রিং লিস্ট বানান
  • 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', 'dig2 4 8']
  1. পাইথনে স্ট্যাটিস্টিক্যাল থিংকিং (Statistical Thinking)

  2. পাইথনে সেন্সাস ডেটা অ্যানালাইসিস (Analyzing Census Data)

  3. পাইথনে একাধিক ফাইলের মাঝে কমন ডেটা শেয়ার করার পদ্ধতি

  4. পাইথনে বাইনারি ডেটা ফাইলে লেখার পদ্ধতি