どうも、ちょげ(@chogetarou)です。
2次元のリスト(List)を1次元に変換する方法を紹介します。
方法

2次元のリスト(List)を1次元に変換する方法は、5つあります。
sum()
1つ目は、sum()を使う方法です。
まず、sum()を呼び出します。
そして、sum()の第1引数に2次元のリスト、第2引数に「[]」を指定します。
#ls=対象のリスト
result = sum(nums, [])
上記のsum()は、2次元のリストを1次元に変換した結果を返します。
使用例
nums = [[1, 2, 3], [4, 5, 6]]
new_nums = sum(nums, [])
print(new_nums)
出力:
[1, 2, 3, 4, 5, 6]
内包表記
2つ目は、内包表記を使う方法です。
まず、[]を記述します。
[]内で、2次元のリストをfor文でループします。
for文のループ変数を、for文でループします。
そして、2つ目のfor文のループ変数を、内包表記の結果として返します。
#ls=対象のリスト
result = [x for row in ls for x in row]
上記の内包表記は、2次元のリストを1次元に変換したリストを返します。
使用例
nums = [[1, 2, 3], [4, 5, 6]]
new_nums = [x for row in nums for x in row]
print(new_nums)
出力:
[1, 2, 3, 4, 5, 6]
extend()
3つ目は、extend()を使う方法です。
まず、空のリストを用意します。
次に、for文で2次元のリストをループします。
そして、ループ処理で、空のリストからextend()を呼び出します。
extend()の引数にループ変数を指定します。
#ls=対象のリスト
result = []
for row in ls:
result.extend(row)
上記のfor文は、2次元のリストを1次元に変換した結果を用意した空のリストに格納します。
使用例
nums = [[1, 2, 3], [4, 5, 6]]
new_nums = []
for row in nums:
new_nums.extend(row)
print(new_nums)
出力:
[1, 2, 3, 4, 5, 6]
reduce()
4つ目は、reduce()を使う方法です。
まず、reduce()をインポートします。
from functools import reduce
次に、reduce()を呼び出します。
そして、reduce()の第1引数に2つの引数を持つラムダ式、第2引数にリストを指定します。
ラムダ式で、2つの引数を足した結果を返します。
#ls=対象のリスト
result = reduce(lambda a, b: a + b, ls)
上記のreduce()は、2次元のリストを1次元に変換したリストを返します。
使用例
from functools import reduce
nums = [[1, 2, 3], [4, 5, 6]]
new_nums = reduce(lambda a, b: a + b, nums)
print(new_nums)
出力:
[1, 2, 3, 4, 5, 6]
itertools
5つ目は、itertoolsを使う方法です。
まず、itertoolsをインポートします。
import itertools
次に、list()を呼び出します。
list()の引数で、itertoolsからchain、chainからfrom_iterable()を呼び出します。
そして、 from_iterable()の引数に、対象のリストを指定します。
#ls=対象のリスト
result = list(itertools.chain.from_iterable(ls))
上記のlist()は、2次元のリストを1次元に変換した結果を返します。
使用例
import itertools
nums = [[1, 2, 3], [4, 5, 6]]
new_nums = list(itertools.chain.from_iterable(nums))
print(new_nums)
出力:
[1, 2, 3, 4, 5, 6]
まとめ
2次元のリスト(List)を1次元に変換する方法は、次の5つです。
- sum()を使う方法
result = sum(nums, [])
- 内包表記を使う方法
result = [x for row in ls for x in row]
- extend()を使う方法
- reduce()を使う方法
result = reduce(lambda a, b: a + b, ls)
- itertoolsを使う方法
result = list(itertools.chain.from_iterable(ls))
コメント