Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 중첩 목록 반복자 평면화


내포된 정수 목록이 있다고 가정합니다. 우리는 그것을 평평하게 하기 위해 반복자를 구현해야 합니다. 각 요소는 정수 또는 목록입니다. 해당 목록의 요소는 정수 또는 기타 목록일 수도 있습니다. 따라서 입력이 [[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() 메서드는 index가 가리키는 값을 반환하고 index를 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