【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する方法を解説しました。本記事の内容がプログラミングする際の参考になりましたら幸いです。

今、ITエンジニアは前例のない売り手市場です

ITエンジニアは前例のない売り手市場、転職なら今

現在のエンジニアの求人数と求人倍率をご存知ですか?

直近(※)のIT業界全体の求人倍率は7.85倍です。

つまり 企業が8回 IT人材の求人を出しても、 1人しかエントリーがない 状況です。

エンジニア側が企業を選ぶ なら、今がチャンスです。

※転職サイトdodaが毎月発表している転職求人倍率。
 2019年12月9日発表/集計対象期間は2019年11月1日〜30日

詳しくはこちら


人気記事【今年の抱負】退職しオープン&フリー&シンプルに生きていく【失敗しない働き方改革の本質】