【Python】2重リストをリストに変換する方法

こんにちは、にわこまです。

今回は、pythonで2重のリストを単なるリストに変換する方法を紹介します。具体的には以下のような処理を行う方法を紹介します。

今回行う処理:[[1, 2], [3, 4]] → [1, 2, 3, 4]

 

誤字脱字や分からない点がございましたらご連絡お願いします。

 

 

スポンサードサーチ


2重リストをリストに変換する方法

・sum()を使う

・関数を作る

・ライブラリを使う

 

上記の3つのどれかを使うことでリストに変換することができます。上から順に簡単に実装できる変換方法となっています。

 

 

使い方 sum()を使う

sum()を使って2重リストをリストに変換するソースコードとその実行結果を以下に示します。

tmp = [[1, 2], [3, 4]]
result = sum(tmp, [])
print(result)

=== 実行結果 ===
[1, 2, 3, 4]

 

sum()の第1引数に2重リスト、第2引数に空のリストを代入して実行することで2重リストをリストに変換することができます。

sum()では次のような処理が行われています。

[] + [1, 2] + [3, 4]

 

sum()を使った方法で2重リストをリストに変換することができましたが、逆に言えば3重リストをリストに変換することができません。正確に言うと3重リストをリストに変換するためには、さらにsum()を使う必要があるということです。

sum()を使って3重以上の多重リストをリストに変換するソースコードとその実行結果を以下に示します。

l = [[[1, 2, 3]], [[3, 6, 9]]]
result = sum(sum(l, []), [])
print(result)

l = [[[[1, 2, 3]]]]
result = sum(sum(sum(l3, []), []), [])

=== 実行結果 ===
[1, 2, 3, 3, 6, 9]
[1, 2, 3]

 

3重リストをリストに変換するにはsum()を2回実行しています。4重リストをリストに変換するにはsum()を3回実行しています。

多重度が増加するとsum()を実行する回数も増加します。さらに、同多重度のリストにしか使うことができません。たとえば、[[1, 2], [[3, 4]]]のようなリストには使うことはできません。

 

 

使い方 関数を作る

sum()を使った方法では複数の多重リストが混在しているリストに対して使うことができないことや、多重度が増加するとsum()の実行回数が増えてしまうというデメリットがありました。これを解決するための関数を作成しました。

作成した関数を使って多重リストをリストに変換するソースコードとその実行結果を以下に示します。

l = [[1, 2, 2], 3, 4, [[6, 9]], [[[999, 8888]]]]

def flatten(l):
    result = []
    for i in l:
        if(type(i) == list):
            result += flatten(i)
            continue
        result.append(i)
    return result

print(flatten(l))

=== 実行結果 ===
[1, 2, 2, 3, 4, 6, 9, 999, 8888]

 

引数に与えられたリストをfor文によって要素の数だけ繰り返します。その要素がリスト型であれば、再帰的に関数を実行します。要素がリスト型でなければ、その要素をresultに追加していきます。

 

 

使い方 ライブラリを使う

先ほどは自身で関数を作成してリストを展開していましたが、同じようなものがライブラリにあります。iteration_utilitiesライブラリです。このライブラリを遣いためにはインストールする必要があります。以下のコマンドを実行します。

pip install iteration_utilities

 

iteration_utilitiesを使って多重リストを展開するソースコードとその実行結果を以下に示します。

from iteration_utilities import deepflatten

l = [[1, 2, 2], 3, 4, [[6, 9]], [[[999, 8888]]]]
print(list(deepflatten(l)))

l = [[1, 2], [3, 4]]
print(list(deepflatten(l)))

=== 実行結果 ===
[1, 2, 2, 3, 4, 6, 9, 999, 8888]
[1, 2, 3, 4]

 

 

まとめ

まとめの画像

今回は、pythonで2重リストをリストに変換する方法と多重リストを展開する方法を紹介しました。

 

本記事で紹介した方法をまとめます。

・sum()を使う

sum()の第1引数に2重リスト、第2引数に空のリストを代入し実行する。

 

・関数を作る

 

・ライブラリを使う

iteration_utiilitiesのdeepflattenの引数に対象のリストを代入し実行する。

 

 

最後までお読みいただきありがとうございます。


スポンサードサーチ