Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでネストされたリストイテレータをフラット化する


整数のネストされたリストがあるとします。それを平坦化するためにイテレータを実装する必要があります。各要素は整数またはリストのいずれかです。そのリストの要素は、整数または他のリストの場合もあります。したがって、入力が[[1、1]、2、[1、1]]の場合、出力は[1、1、2、1、1]

になります。

これを解決するには、次の手順に従います-

  • 初期化セクションでは、ネストされたリストを取得します。これは次のように機能します-

  • resを空のリストとして設定し、インデックス:=0、getVal(nestedList)を呼び出します

  • getVal()はnestedIntegersを取り、これは-

    として機能します
  • ネストされた整数のiの場合

    • iが整数の場合は、iをres配列に挿入します。それ以外の場合は、getVal(iリスト)

      を呼び出します。
  • next()メソッドは、インデックスが指す値を返し、インデックスを1増やします

  • hasNext()は、その隣に要素がある場合はtrueを返し、そうでない場合はfalseを返します

例(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

  1. Pythonのイテレータ関数

    説明 Iteratorは、反復プロトコルを実装するPythonのオブジェクトです。タプル、リスト、セットは、Pythonでは組み込みイテレータと呼ばれます。反復プロトコルには2つのタイプのメソッドがあります。 __ iter __(): このメソッドは、イテレータを初期化するときに呼び出され、next()または__next __()(Python 3の場合)メソッドで構成されるオブジェクトを返す必要があります。 next()または__next __()(Python 3の場合): このメソッドは、反復シーケンスから次の要素を返す必要があります。イテレータがforループで使用される場合

  2. Pythonで浅いリストをフラット化する方法は?

    シンプルで簡単な解決策は、2つのネストされたforループを使用して、フラットリストのサブリストからアイテムを追加することです。 lst = [[10, 20, 30, 40], [50, 60, 70, 80], [90, 100, 110, 120]] flatlist = [] for sublist in lst: for item in sublist: flatlist.append(item) print (flatlist) よりコンパクトでPythonicなソリューションは、itertoolsモジュールのchain()関数を使用することです。 >