Python – リストを個々の要素に平坦化する

この記事では、Python のリスト内包を通じてリストのリストをフラット化する方法を学びます。

Python リストを操作しているときに、リストのフラット化、つまり混合リストをフラット化されたリストに変換する必要があるという問題が発生することがあります。これにより、1D リストを入力として使用するアプリケーションをドメイン内に含めることができます。

このタスクを実行する特定の方法について説明しましょう。

例:

  Input  : [[1,3, 'geeks'], [4,5], [6, 'best']]   Output  : [1, 3, 'geeks', 4, 5, 6, 'best']   Explaination:   Flattening convert a mixed list to a flattened one. 

Python でリストを個々の要素にフラット化する方法

以下は、「Python でリストのリストをフラット化する方法」で説明するメソッドです。

  • を使用してリストを平坦化する リストの内包表記
  • を使用してリストを平坦化する 和()
  • を使用してリストを平坦化する ループ
  • を使用してリストを平坦化する flatten() メソッド
  • を使用してリストを平坦化する 鎖() インスタンス()
  • を使用してリストを平坦化する 減らす() 関数
  • groupbyを使用してリストを平坦化する
  • を使用してリストを平坦化する itertools.chain.from_iterable()
  • 再帰を使用してリストを平坦化する

1. リスト内包表記を使用してリストのリストを平坦化する

ここで使用しているのは、 リストの内包表記 リストを 2D から 1D にフラット化します。

Python3




res> => [i> for> row> in> [[> 1> ,> 3> ,> 'geeks'> ], [> 4> ,> 5> ],> > [> 6> ,> 'best'> ]]> for> i> in> row]> print> (res)>

出力:

[1, 3, 'geeks', 4, 5, 6, 'best'] 

時間計算量: O(n) ここで、n はリスト内の要素の数です。
補助スペース: O(n) ここで、n はリスト内の要素の数です。

2. sum() 関数を使用してリストのリストを平坦化する

ここで使用しているのは、 sum() 関数 ここでは、最初のパラメータとして反復可能なオブジェクトとして test_list を渡し、2 番目のパラメータとして要素を格納する空のリストとして渡しました。

Python3




test_list> => [[> 1> ,> 3> ,> 'gfg'> ], [> 4> ,> 5> ], [> 6> ,> 'best'> ]]> test_list> => sum> (test_list, [])> print> (test_list)>

出力:

[1, 3, 'gfg', 4, 5, 6, 'best'] 

時間計算量: O(n)。n はリスト test_list の長さです。
補助スペース: サイズ n の O(n) 個の追加スペースが作成されます。n はリスト内の要素の数です。

3. f の使用 またはループする リストのリストをフラット化する

上記の機能を組み合わせてこのタスクを実行できます。この例では、リストのインスタンスをチェックしてフラット化し、残りの要素をリストに強引に追加します。

Python3




def> flatten(test_list):> > if> isinstance> (test_list,> list> ):> > temp> => []> > for> ele> in> test_list:> > temp.extend(flatten(ele))> > return> temp> > else> :> > return> [test_list]> # Initializing list> test_list> => [> 'gfg'> ,> 1> , [> 5> ,> 6> ,> 'geeks'> ],> 67.4> , [> 5> ],> 'best'> ]> # Flatten List to individual elements> # using loop + isinstance()> res> => flatten(test_list)> > # printing result> print> (> 'The List after flattening : '> +> str> (res))>

出力:

The List after flattening : [‘gfg’, 1, 5, 6, ‘geeks’, 67.4, 5, ‘best’] 

時間計算量: この関数の関数は O(n) です。ここで、n はネストされたリスト内の要素の総数です。
空間の複雑さ: この関数の も O(n) です。これは、再帰呼び出しごとに新しいリスト temp が作成され、フラット化されたサブリストが格納され、最終的なフラット化されたリストが res 変数に格納されます。

4. flatten() メソッドを使用してリストのリストをフラット化する

パンダ flatten() は、1 次元に折りたたまれた配列のコピーを返します。

Python3




from> pandas.core.common> import> flatten> l> => [[> 1> ,> 3> ,> 'gfg'> ], [> 4> ,> 5> ], [> 6> ,> 'best'> ]]> print> (> list> (flatten(l)))>

出力:

[1, 3, 'gfg', 4, 5, 6, 'best'] 

5.U isinstance() でchain() を歌う リストのリストをフラット化するには

これは、このタスクを実行できるさらに別の方法です。この中で、 どれの を使用して反復タスクを実行します 鎖() リストインスタンスのチェック これは使用して行われます インスタンス()

Python3




from> itertools> import> chain> # Initializing list> test_list> => [> 'gfg'> ,> 1> , [> 5> ,> 6> ,> 'geeks'> ],> 67.4> , [> 5> ],> 'best'> ]> # Flatten List to individual elements> # using chain() + isinstance()> res> => list> (chain(> *> [ele> if> isinstance> (ele,> list> )> > else> [ele]> for> ele> in> test_list]))> > # printing result> print> (> 'The List after flattening : '> +> str> (res))>

出力:

The List after flattening : [‘gfg’, 1, 5, 6, ‘geeks’, 67.4, 5, ‘best’] 

時間計算量: の上)
補助スペース: の上)

6.reduce()関数を使用してリストのリストを平坦化する

減らす() 関数はで定義されています 関数ツール モジュール。 2 つの引数の関数を指定されたシーケンスに連続的に適用し、単一の値を返します。

Python3




from> functools> import> reduce> > # Initializing list> test_list> => [[> 1> ,> 3> ,> 'gfg'> ], [> 4> ,> 5> ], [> 6> ,> 'best'> ]]> > # Flatten List to individual elements> # using reduce()> res> => reduce> (> lambda> x,y: x> +> y, test_list)> > # printing result> print> (> 'The List after flattening : '> +> str> (res))> #This code is contributed by Edula Vinay Kumar Reddy>

出力:

The List after Flattening : [1, 3, 'gfg', 4, 5, 6, 'best'] 

時間計算量: の上)
補助スペース: の上)

7. groupby を使用してリストのリストをフラット化する

インポートする グループビー からのモジュール イターツール 。リストの test_list を定義します。 res 変数を空のリストとして定義します。ネストされた for ループを使用して、test_list の要素を反復処理します。

各要素について、それがリストであるかどうかを確認します。リストの場合は、リストの各要素を反復処理し、それを res 変数に追加します。リストでない場合は、要素を res 変数に直接追加します。

res 変数をフラット化されたリストとして出力します。

Python3




from> itertools> import> groupby> # Initializing list> test_list> => [[> 1> ,> 3> ,> 'gfg'> ], [> 4> ,> 5> ], [> 6> ,> 'best'> ]]> # Flatten List to individual elements> # using groupby()> res> => [i> for> j> in> test_list> for> i> in> (j> if> isinstance> (j,> list> )> else> [j])]> > # printing result> print> (> 'The List after flattening : '> +> str> (res))> #This code is contributed by Rayudu.>

出力:

The List after flattening : [1, 3, 'gfg', 4, 5, 6, 'best'] 

時間計算量: コードの時間計算量は O(n) です。ここで、n は入力リスト内の要素の数です。ネストされたループは、入力リストの各要素を 1 回だけ繰り返します。
空間の複雑さ: コードの空間計算量は O(n) です。ここで、n は入力リスト内の要素の数です。 res 変数は、最大 n 個の要素を含めることができるフラット化されたリストを格納するために使用されます。

8. itertools.chain.from_iterable() を使用してリストのリストをフラット化する

この例では、以下のコードが使用します。 itertools.chain.from_iterable() ネストされたリストをフラット化するメソッド。

コードを分解して説明しましょう。以下のコードは、`itertools.chain.from_iterable()` を使用して、ネストされたリスト (`nested_list`) を 1 つのリスト (` flattened_list`) にフラット化し、結果を出力します。

Python3




from> itertools> import> chain> nested_list> => [[> 1> ,> 2> ,> 3> ], [> 4> ,> 5> ], [> 6> ,> 7> ,> 8> ]]> flattened_list> => list> (chain.from_iterable(nested_list))> print> (flattened_list)>

出力:

[1, 2, 3, 4, 5, 6, 7, 8] 

時間計算量: の上)
補助スペース: の上)

9. 再帰を使用して リストのリストをフラット化する

この例では、以下のコードは、ネストされたリストを入力として受け取り、個々の要素を含むフラット化されたリストを返す関数 flatten_list を定義します。平坦化は次の方法で実現されます。 再帰

Python3




def> flatten_list(lst):> > flat_list> => []> > for> item> in> lst:> > if> isinstance> (item,> list> ):> > flat_list.extend(flatten_list(item))> > else> :> > flat_list.append(item)> > return> flat_list> nested_list> => [[> 1> ,> 2> ,> 3> ], [> 4> , [> 5> ,> 6> ]], [> 7> ,> 8> ]]> flattened_list> => flatten_list(nested_list)> print> (flattened_list)>

出力:

[1, 2, 3, 4, 5, 6, 7, 8] 

時間計算量: の上)
補助スペース: の上)

リストのリストをフラット化する合計 9 つの方法を説明しました。 Python のリストのフラット化は、ネストされたリストのリストを 1 つのリストに変換するために使用されます。上記のいずれかの方法を使用して、要件に応じてリストをフラット化できます。

類似の記事:

  • リンクされたリストのフラット化
  • リンクされたリストをフラット化するための Python プログラム
  • パイソン |グループ化されたリストの平坦化