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

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

Pythonでは、リストの中にさらにリストを入れた「ネストされたリスト(入れ子構造のリスト)」を作成できます。本記事では、シンプルなリストの各要素を、ネストされたリストの対応する要素に加算する方法を解説します。リスト同士の長さが異なる場合、短い方のリストの長さが結果のリストの最大長となります。

以下に、この処理を実現する複数の方法を紹介します。

forループを使用する方法

この方法では、短い方のリストの長さを取得し、その要素を順番にループ処理しながら、大きい方のリストの対応する要素に加算していきます。各要素はappend()関数を使って結果リストに追加します。

コード例

simple_list = [25, 35, 45, 55, 65]
nested_list = [[5,10], [10], [5,15], [25], [5,10,15],[5,6]]
result_list = []

for n in range(len(simple_list)):
    var = []
    for m in nested_list[n]:
        var.append(m + simple_list[n])
    result_list.append(var)
print("The first list :", simple_list)
print("The nested list :", nested_list)
print("Result :",result_list)

実行結果

上記のコードを実行すると、以下の出力が得られます。

The first list : [25, 35, 45, 55, 65]
The nested list : [[5, 10], [10], [5, 15], [25], [5, 10, 15], [5, 6]]
Result : [[30, 35], [45], [50, 60], [80], [70, 75, 80]]

enumerate()を使用する方法

enumerate()関数は、リストやタプルなどのコレクションを受け取り、インデックスと要素をペアにしたenumerateオブジェクトを返します。このアプローチでは、まず外側のforループでenumerate()を使ってネストされたリストの各要素を取得し、次に内側のforループでシンプルなリストの対応する要素に加算します。

コード例

simple_list = [25, 35, 45, 55, 65,25]
nested_list = [[5,10], [10], [5,15], [25], [5,10,15]]
result_list = []

# enumerateを使用
result_list = [[val + simple_list[p] for val in q] for p, q in enumerate(nested_list)]
print("The first list :", simple_list)
print("The nested list :", nested_list)
print("Result :",result_list)

実行結果

上記のコードを実行すると、以下の出力が得られます。

The first list : [25, 35, 45, 55, 65, 25]
The nested list : [[5, 10], [10], [5, 15], [25], [5, 10, 15]]
Result : [[30, 35], [45], [50, 60], [80], [70, 75, 80]]

zip()を使用する方法

このアプローチでは、上記のプログラムをenumerate()の代わりにzip()を使って実装します。zip()は2つのリストを引数として受け取り、それぞれの対応する要素をペアにして処理できるようにします。リスト内包表記と組み合わせることで、簡潔で読みやすいコードになります。

コード例

simple_list = [25, 35, 45, 55, 65,25]
nested_list = [[5,10], [10], [5,15], [25], [5,10,15]]
result_list = []

result_list = [[w + u for w in v ]for u, v in zip(simple_list, nested_list)]

print("The first list :", simple_list)
print("The nested list :", nested_list)
print("Result :",result_list)

実行結果

上記のコードを実行すると、以下の出力が得られます。

The first list : [25, 35, 45, 55, 65, 25]
The nested list : [[5, 10], [10], [5, 15], [25], [5, 10, 15]]
Result : [[30, 35], [45], [50, 60], [80], [70, 75, 80]]

まとめ

シンプルなリストとネストされたリストの要素をインデックスに基づいて加算するには、forループenumerate()zip()の3つの方法があります。forループは処理の流れが分かりやすく初心者に適しており、enumerate()zip()とリスト内包表記を組み合わせる方法は、より簡潔でPythonらしいコードを書けます。用途や可読性の要件に応じて最適な方法を選択しましょう。

  1. Pythonでリストのインデックスを値とする辞書を作成する方法

    この記事では、Pythonで頻繁に使われるコレクションの一つである「リスト」から辞書を作成する方法を解説します。リスト自体にはインデックスやキーが含まれていませんが、辞書ではすべての要素(値)に対してキーやインデックスを関連付ける必要があります。ここでは、リストの各要素を「値」として持ち、その位置(インデックス)を対応する値として格納する辞書の作り方を、2つの異なるアプローチで紹介します。enumerate関数を使う方法enumerate関数は、イテラブルなオブジェクトの各要素にカウンター(連番)を割り当ててくれる便利な組み込み関数です。この関数を対象のリストに適用し、forループと組み合わせ

  2. Pythonのリストにインデックスを使って要素を追加する方法

    Pythonのリスト(list)は、順序付けられており変更可能なコレクション型データです。重複した要素も許容するため、Pythonプログラムで最も頻繁に使われるデータ型の一つとなっています。本記事では、インデックス機能を活用してリストに要素を追加する方法を解説します。要素を追加する前に、まずインデックスを使ってリスト内の要素にアクセスする基本的な方法を確認しておきましょう。インデックスを使ったリスト要素へのアクセスリスト内のすべての要素にはインデックスが割り当てられており、これによって要素の順序が保たれています。インデックスを指定することで、任意の位置にある要素へアクセスできます。スライス表記