2D 配列を 1D 配列に変換することをフラット化と呼びます。 問題を解決するための多くのアプローチがあります。
このチュートリアルでは、それらのいくつかについて説明します。
例を見てみましょう。
入力
[[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]]
出力
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#1。 ループ
この問題を解決する最も一般的な方法は、ループを使用することです。 すでに手に入れている方も多いと思います。 ループを使用して問題を解決する手順を見てみましょう。
- リストのリストをダミー データで初期化し、data という名前を付けます。
- ここで、flat_list という空のリストを初期化します。
- データを反復処理します。
- 現在のリストからすべての要素をアンパックします。
- list append メソッドを使用してそれらを flat_list に追加します。
- 結果を印刷します。
以下の問題のコードを参照してください。
# initializing the data and an empty list data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]] flat_list = [] # iterating over the data for item in data: # appending elements to the flat_list flat_list += item # printing the resultantn flat_list print(flat_list)
別のループを使用して、連結演算子の代わりにサブリスト要素を flat_list に追加できます。 ループの代わりにリスト内包表記を使用することもできます。
どちらも同じ働きをします。 問題を解決する次の方法を見てみましょう。
#2。 Itertools – チェーン
itertools 組み込みモジュールの chain というメソッドを使用します。
メソッドチェーンは各サブリストを繰り返し処理し、サブリストがなくなるまで要素を返します。 リストに変換する必要がある iterable を返します。
問題を解決するための手順を見てみましょう。
- リストのリストをダミー データで初期化し、data という名前を付けます。
- itertools.chain(*data) を使用してフラット化された iterable を取得します。
- 結果の iterable をリストに変換します。
- フラット化リストを印刷します。
以下のスニペットのコードを確認できます。
# importing the module import itertools # initializing the data data = [[1, 2, 3], [4, 5], [6, 7, 8, 9, 10]] # flattening the list and storing the result flat_list = itertools.chain(*data) # converting iterable to list and printing print(list(flat_list))
#3。 マルチレベル リストの平坦化
リストのリストを平坦化する方法を見てきました。 リストを平坦化するために説明した上記の方法は、複数レベルのリストでは機能しません。 例を見てみましょう。
入力
[1, [2, 3, [4, 5]], 6, [[7], [8, 9]]]
出力
[1, 2, 3, 4, 5, 6, 7, 8, 9]
プログラムの前にリストの深さがわからないので、再帰を使用して問題を解決する必要があります。
- 例に示すようにデータを初期化し、data という名前を付けます。
- flat_list という空のリストを初期化します。
- flatten_list という関数を書きます。
- 指定されたリストの要素を反復処理します。
- 要素がリストの場合は、同じ関数を再帰的に呼び出します。
- 要素がリストでない場合は、その要素を flat_list に追加します。
- 関数をデータで呼び出します。
- この関数は、flat_list リスト内のすべての要素を埋めます。
- flat_list を出力して出力を確認します。
ふぅ! コーディングするための多くのステップ。 心配しないで。 上記のステートメントをコードに変換するには、数分もかかりません。
# initializing the data and empty list data = [1, [2, 3, [4, 5]], 6, [[7], [8, 9]]] flat_list = [] # function def flatten_list(data): # iterating over the data for element in data: # checking for list if type(element) == list: # calling the same function with current element as new argument flatten_list(element) else: flat_list.append(element) # flattening the given list flatten_list(data) # printing the flat_list print(flat_list)
既存のリストを変換していないことを思い出してください。 代わりに、指定されたリスト要素で新しいリストを作成しました。
結論
チュートリアルをお楽しみいただけたでしょうか。 Python でリストをフラット化する方法は他にもたくさんあるかもしれませんが、上記がおそらく最も簡単な方法だと思います。
ハッピーコーディング🙂