【python】listをflatten(listの入れ子構造を除去)する方法

python

pythonのlistをflattenしたい人

pythonのlistをflattenしたい人
「pythonのlistをflattenするにはどうしたらいいでしょうか?こんな感じの変換をしたいです↓
 [1,[2,[3,[4,5]]]] → [1,2,3,4,5]
 [1,[2,3],[[4]],5] → [1,2,3,4,5]
具体的な使用例としてコピペできるソースコードも欲しいです」

こんな疑問を解決します。

この記事を書いている私はIT業界歴12年、年収1,000万円ちょっとの金融系エンジニアです。学生時代から様々なプログラミング言語を扱ってきましたが、その中でもpythonはとても扱いやすく生産性も高く、オススメの言語です。

本記事では、pythonでlist構造をflatten(listの入れ子構造を除去)する方法を解説します。具体例を示し、細かい構文に迷ったときにコピー&ペーストして使えることも目指しました。少しでもお役に立てますと幸いです。

flattenとは

flattenとは

flattenとは、入れ子になっているlistのlistを単純なlistにすることです。

pythonには標準のflatten関数が無いので実装例を示します

pythonには標準のflatten関数が無いので実装例を示します

flatten関数の実装例

collectionsライブラリからIterableを使って実装します。まずはライブラリからIterableをimportしておきます。

from collections import Iterable

 
flatten関数のプログラムコードは以下の通りです。

from collections import Iterable
 
def flatten(l):
    for el in l:
        if isinstance(el, Iterable) and not isinstance(el, basestring):
            for sub in flatten(el):
                yield sub
        else:
            yield el
 

以下のサイトを参考にしました。
参考: stack overflow(外部サイト):Flatten an irregular list of lists

flatten関数の実行例

flatten関数の実行例

実行結果は以下の通りです。

 
>>> list(flatten([1,[2,[3,[4,5]]]]))
[1, 2, 3, 4, 5]

>>> list(flatten([1,[2,3],[[4]],5]))
[1, 2, 3, 4, 5]

>>> list(flatten([['cookie',['chocolate']],[['ice cream']],[]]))
['cookie', 'chocolate', 'ice cream']
 

 
今回は以上です。pythonでlistの入れ子構造をflattenする方法を解説しました。本記事の内容がプログラミングする際の参考になりましたら幸いです。

pythonは自動車、半導体メーカーなどでも使われています