मान लीजिए हमारे पास पूर्णांकों की एक नेस्टेड लिस्ट है; हमें इसे फ्लैट करने के लिए एक इटरेटर लागू करना है। प्रत्येक एलिमेंट या तो एक इंटीजर है, या एक लिस्ट। उस लिस्ट के एलिमेंट्स भी इंटीजर या अन्य लिस्ट हो सकते हैं। इसलिए यदि इनपुट [[1, 1], 2, [1, 1]] जैसा है, तो आउटपुट [1, 1, 2, 1, 1] होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
इनिशियलाइज़िंग सेक्शन में, यह नेस्टेड लिस्ट लेगा, यह निम्नानुसार काम करेगा -
res को खाली लिस्ट के रूप में सेट करें, index := 0, getVal(nestedList) कॉल करें
getVal() nestedIntegers लेगा, यह निम्नानुसार काम करेगा -
nestedIntegers में प्रत्येक i के लिए
यदि i एक इंटीजर है, तो i को res ऐरे में इन्सर्ट करें, अन्यथा getVal(i लिस्ट) कॉल करें
next() मेथड इंडेक्स द्वारा इंगित मान लौटाएगा, और इंडेक्स को 1 से बढ़ाएगा
hasNext() true लौटाएगा, जब इसके बाद कोई एलिमेंट हो, अन्यथा false
उदाहरण (पायथन)
बेहतर समझ पाने के लिए निम्न कार्यान्वयन देखें -
class NestedIterator(object):
def __init__(self, nestedList):
self.res = []
self.index = 0
self.getVal(nestedList)
#print(self.res)
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