Pythonで二次元リストを一次元リストに変換したい場合がある。
sum
関数を使えば一行で変換可能。
知らないと一見何をしている処理なのか分からないけど、使ってみると意外と便利。
三次元リストを一次元リストに変換したい場合はsum
関数を二回使えばよい。
x = [[1, 2], [3, 4]]
x = sum(x, [])
print(x) # [1, 2, 3, 4]
y = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
y = sum(sum(y, []), [])
print(y) # [1, 2, 3, 4, 5, 6, 7, 8]
速度重視の場合はitertools.chain.from_iterable()を使う。
こちらの方がsum
関数を使う場合よりも高速。
import itertools
x = [[1, 2], [3, 4]]
x = itertools.chain.from_iterable(x)
print(list(x)) # [1, 2, 3, 4]
y = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
y = itertools.chain.from_iterable(list(itertools.chain.from_iterable(y)))
print(list(y)) # [1, 2, 3, 4, 5, 6, 7, 8]
上記の他にも自作関数を作るという方法もある。
リストの次元数に依らないので、様々な次元数のデータを扱うときはオススメ。