こんにちは!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.chain
のfrom_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には元から関数が用意されています。優秀!
それでは、また次回もお楽しみに!