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

Flatten Nested List Iterator ใน Python


สมมติว่าเรามีรายการจำนวนเต็มซ้อนกัน เราต้องใช้ตัววนซ้ำเพื่อทำให้เรียบ แต่ละองค์ประกอบเป็นจำนวนเต็มหรือรายการ องค์ประกอบของรายการนั้นอาจเป็นจำนวนเต็มหรือรายการอื่นๆ ดังนั้นหากอินพุตเป็นเหมือน [[1, 1], 2, [1, 1]] ผลลัพธ์จะเป็น [1, 1, 2, 1, 1]

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

  • ในส่วนเริ่มต้น จะใช้รายการที่ซ้อนกัน ซึ่งจะทำงานดังนี้ −

  • ตั้งค่า res เป็นรายการว่าง index :=0, โทร getVal(nestedList)

  • getVal() จะใช้ nestedIntegers ซึ่งจะทำงานเป็น −

  • สำหรับฉันใน nestedIntegers

    • ถ้าฉันเป็นจำนวนเต็ม ให้ใส่ i ลงในอาร์เรย์ res หรือเรียก getVal(รายการ i)

  • วิธี next() จะคืนค่าที่ชี้โดยดัชนี และเพิ่มดัชนีขึ้น 1

  • hasNext() จะคืนค่า จริง เมื่อมีองค์ประกอบอยู่ข้างๆ มิฉะนั้น เท็จ

ตัวอย่าง(Python)

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

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