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

পাইথনে নেস্টেড লিস্ট ইটেরেটর ফ্ল্যাটেন করা


মনে করুন আমাদের একটি নেস্টেড লিস্ট অফ ইন্টিজার আছে, আমাদের এটিকে ফ্ল্যাটেন করার জন্য একটি ইটেরেটর ইম্প্লিমেন্ট করতে হবে। প্রতিটি এলিমেন্ট হয় একটি ইন্টিজার, অথবা একটি লিস্ট। সেই লিস্টের এলিমেন্টগুলোর মাঝেও আবার ইন্টিজার বা অন্য লিস্ট থাকতে পারে। ইনপুট যদি [[1, 1], 2, [1, 1]] হয়, তবে আউটপুট হবে [1, 1, 2, 1, 1]।

এটি সমাধান করতে আমরা নিচের ধাপগুলো ফলো করব (রিকার্সিভ ফ্ল্যাটেন + ইটেরেটর প্যাটার্ন):

  • ইনিশিয়ালাইজেশন: নেস্টেড লিস্ট নেবে, res খালি লিস্ট, index := 0, getVal(nestedList) কল করুন।

  • getVal(NestedList):

    • for item in NestedList:

      • যদি item ইন্টিজার হয়, তবে res.append(item)।

      • অন্যথায় getVal(item) কল করুন (রিকার্সিভ)۔

  • next() মেথড index-এ পয়েন্ট করা ভ্যালু রিটার্ন করবে এবং index ১ বাড়াবে।

  • hasNext() মেথড true রিটার্ন করবে যদি পরবর্তী এলিমেন্ট থাকে, অন্যথায় false।

উদাহরণ (Python)

নিচের ইমপ্লিমেন্টেশন দেখুন ভালো বুঝতে।

class NestedIterator(object):
    def __init__(self, nestedList):
        self.res = []
        self.index = 0
        self.getVal(nestedList)

    def getVal(self, NestedList):
        for item in NestedList:
            if isinstance(item, int):
                self.res.append(item)
            else:
                self.getVal(item)

    def next(self):
        self.index += 1
        return self.res[self.index - 1]

    def hasNext(self):
        if self.index == len(self.res):
            return False
        return True

ob = NestedIterator([[1,1],2,[1,1]])
while ob.hasNext():
    print(ob.next())

ইনপুট

[[1,1],2,[1,1]]

আউটপুট

1
1
2
1
1

  1. পাইথনে নেস্টেড লিস্ট কম্প্রিহেনশন

  2. পাইথন ইটারেটর টাইপস (Iterator Types)

  3. পাইথনে ইটারেটর ফাংশন (Iterator Function)

  4. পাইথনে শ্যালো লিস্ট ফ্ল্যাটেন কীভাবে করবেন?