Pythonでネストされたリストイテレータをフラット化する
これを解決するには、次の手順に従います-
-
初期化セクションでは、ネストされたリストを取得します。これは次のように機能します-
-
resを空のリストとして設定し、インデックス:=0、getVal(nestedList)を呼び出します
-
getVal()は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
-
Pythonのイテレータ関数
説明 Iteratorは、反復プロトコルを実装するPythonのオブジェクトです。タプル、リスト、セットは、Pythonでは組み込みイテレータと呼ばれます。反復プロトコルには2つのタイプのメソッドがあります。 __ iter __(): このメソッドは、イテレータを初期化するときに呼び出され、next()または__next __()(Python 3の場合)メソッドで構成されるオブジェクトを返す必要があります。 next()または__next __()(Python 3の場合): このメソッドは、反復シーケンスから次の要素を返す必要があります。イテレータがforループで使用される場合
-
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()関数を使用することです。 >