Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで複数のリストの同じインデックスにある要素をグループ化する方法

このチュートリアルでは、複数のリストに含まれる同じインデックスの要素を1つのリストにまとめるプログラムを作成します。なお、ここでは「すべてのリストが同じ長さである」という条件を設けています。まずは例を見て、処理内容を具体的に理解しましょう。

入力

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

出力

[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

この問題はいくつかの方法で解くことができます。まずは、通常のループを使った基本的な解き方から見ていきましょう。

  • リストのリストを初期化します。
  • 結果を格納するための空のリストを用意します。
  • サブリストの長さ分だけ繰り返し処理を行います。
    • 結果リストに空のサブリストを追加します。
    • 元のリストの長さ分だけ繰り返し処理を行います。
      • 各リストの現在のインデックスの要素を、結果の対応するサブリストに追加します。
  • 最後に結果を出力します。

コード例

# リストを初期化
lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# 結果を格納する空のリスト
result = []
# サブリストの長さ(3)分だけ繰り返す
for i in range(len(lists[0])):
    # 空のサブリストを追加
    result.append([])
    # 元のリストの長さ(3)分だけ繰り返す
    for j in range(len(lists)):
        # 現在のインデックスの要素を結果に追加
        result[i].append(lists[j][i])
# 結果を出力
print(result)

出力

上記のコードを実行すると、次のような結果が得られます。

[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

zip関数を使ったスマートな解法

実は、zip関数を使えば、ほとんど手間をかけずにこの問題を解決できます。zip関数は、各リストの同じインデックスの要素をタプルとしてまとめてくれるため、まさに今回求めている動作を実現してくれます。それではコードを見てみましょう。

コード例

# リストを初期化
lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# zip関数を使って出力
print(list(zip(*lists)))

出力

上記のコードを実行すると、次のような結果が得られます。

[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

結果はタプル形式になっています。これらのタプルをリストに変換したい場合は、リストを反復処理しながら変換することもできますが、さらに簡単な方法があります。map関数を使えば、すべてのタプルを一括でリストに変換でき、わずか1行のコードで済みます。

コード例

# リストを初期化
lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# zipとmapを組み合わせて出力
print(list(map(list, zip(*lists))))

出力

上記のコードを実行すると、次のような結果が得られます。

[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

ここではmap関数を使ってリストを反復処理し、各タプルをリストに変換しました。もちろん、同じ処理はループを使っても実現できます。ぜひご自身で試してみてください。

まとめ

このチュートリアルでは、複数のリストの同じインデックスにある要素をグループ化する3つの方法(forループ、zip関数、zip+map関数の組み合わせ)を学びました。特にzip関数を使った方法は簡潔でPythonらしい書き方なので、覚えておくとさまざまな場面で役立ちます。チュートリアルの内容について疑問点がある場合は、コメント欄でお気軽にお尋ねください。

  1. Pythonでインデックスに基づいてネストされたリストに要素を加算する方法

    Pythonでは、リストの中にさらにリストを入れた「ネストされたリスト(入れ子構造のリスト)」を作成できます。本記事では、シンプルなリストの各要素を、ネストされたリストの対応する要素に加算する方法を解説します。リスト同士の長さが異なる場合、短い方のリストの長さが結果のリストの最大長となります。以下に、この処理を実現する複数の方法を紹介します。forループを使用する方法この方法では、短い方のリストの長さを取得し、その要素を順番にループ処理しながら、大きい方のリストの対応する要素に加算していきます。各要素はappend()関数を使って結果リストに追加します。コード例simple_list = [2

  2. 【Python】リスト内のすべての要素が同じ値かどうかを確認する3つの方法

    リスト内の要素がすべて同じ値であるかどうかを確認したい場面はよくあります。たとえば、データの整合性チェックやバリデーション処理などで必要になることがあります。Pythonでは、このような判定をいくつかの方法で実装できます。本記事では、代表的な3つのアプローチをサンプルコードとともにわかりやすく解説します。1. forループを使う方法まずリストの先頭要素を取得し、forループで各要素を順番に先頭要素と比較していきます。途中で一致しない要素が見つかった時点でループを抜け、結果をFalseにするのがポイントです。サンプルコードList = [Mon, Mon, Mon, Mon] result =