[Python]2次元のリストを1次元に変換するには?

python

どうも、ちょげ(@chogetarou)です。

2次元のリスト(List)を1次元に変換する方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

2次元のリスト(List)を1次元に変換する方法は、5つあります。

sum()

1つ目は、sum()を使う方法です。

まず、sum()を呼び出します。

そして、sum()の第1引数に2次元のリスト、第2引数に「[]」を指定します。

#ls=対象のリスト
result = sum(nums, [])

上記のsum()は、2次元のリストを1次元に変換した結果を返します。

上記のsum()では、合計値の初期値として空のリストを指定しています。

sum()は、初期値にリストの全ての要素を足していきます。

結果、sum()は、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))

コメント

タイトルとURLをコピーしました