LoginSignup
1
1

More than 1 year has passed since last update.

Python小技集 - #2 多次元リストの平坦化 (flatten)

Posted at

こんにちは!beatbox4108です。
今日はPythonで多次元リストを平坦化 (flatten)する方法について説明していきます。

まず平坦化とは?

平坦化とは、簡単に言えば、

[
    [0,1,2,3,4],
    [5,6,7,8,9],
    [10,11,12,13,14]
]

[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]

のようにネストされたリストのネストを外すような操作です。

このような操作を行う方法はいくつかあります。

1.sum関数を使う方法

pythonのsum関数には初期値が設定できるので、その初期値に+演算をする原理で合成してしまおうという魂胆です。

l=[[0,1],[2],[3,4,5]]
print(sum(l,[]))
[0,1,2,3,4,5]

第二引数にリストを設定するのを忘れないようにしましょう。

2. itertools.chainを使う方法

itertools.chainfrom_iterable()を使えば、リストだけでなく、イテレーターを返すイテレーターならすべて使えます。
ただ、戻り値もイテレーターなので、list()関数などで変換するのを忘れないようにしましょう。

from itertools import chain

l=[[0,1],[2],[3,4,5]]
print(list(chain.from_iterable(l)))
[0,1,2,3,4,5]

3. リスト内包表記

l=[[0,1],[2],[3,4,5]]
print([e for e in i for i in l])
[0,1,2,3,4,5]

4. pandas.core.common.flattenを使う方法

from pandas.core.common import flatten

l=[[0,1],[2],[3,4,5]]
print(list(flatten(l)))
[0,1,2,3,4,5]

いかがだったでしょうか。なんかどれもこれも似たような感じでしたね...
ちなみにndarrayには元から関数が用意されています。優秀!
それでは、また次回もお楽しみに!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1