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

Pythonでネストされたリストの各開始インデックスを取得する方法

Pythonでは、ネストされたリスト(リストの中にリストが入った構造)を扱う際、各サブリストが元のリスト全体の中でどの位置から始まるのか、その「開始インデックス」を求めたいケースがあります。本記事では、シンプルな反復処理と append メソッドを組み合わせて、この問題を解決する方法を解説します。

実装例

以下に具体的なコード例を示します。

my_list = [[51], [91, 22, 36, 44], [25, 25], [46, 67, 78, 82, 69, 29], [7, 5]]
print("元のリスト:")
print(my_list)

my_result = []
my_len = 0
for sub in my_list:
    my_result.append(my_len)
    my_len += len(sub)

print("各サブリストの開始インデックス:")
print(my_result)

出力結果

元のリスト:
[[51], [91, 22, 36, 44], [25, 25], [46, 67, 78, 82, 69, 29], [7, 5]]
各サブリストの開始インデックス:
[0, 1, 5, 7, 13]

処理の流れと解説

  • まず、複数のサブリストを含むリスト(リストのリスト)を定義し、コンソールに表示します。

  • 次に、結果を格納するための空のリスト my_result を用意し、累積カウント用の整数変数 my_len を 0 で初期化します。

  • for ループで元のリストを順番に走査し、その時点での my_len の値(=現在のサブリストの開始位置)を空のリストに追加します。

  • ループ内で、処理済みのサブリストの要素数だけ my_len を加算することで、次のサブリストの開始インデックスを正しく追跡できます。

  • すべての走査が終わった時点で、my_result には各サブリストの開始インデックスが格納されており、これが最終的な結果となります。

  • 最後に、結果をコンソールに出力して表示します。

補足:itertools.accumulate を使った別のアプローチ

標準ライブラリの itertools.accumulate を使えば、同じ処理をより簡潔に書くこともできます。各サブリストの長さを先頭から順に累積加算し、最初に 0 を付加する方法です。

from itertools import accumulate

my_list = [[51], [91, 22, 36, 44], [25, 25], [46, 67, 78, 82, 69, 29], [7, 5]]

result = [0] + list(accumulate(len(sub) for sub in my_list[:-1]))
print(result)  # 出力: [0, 1, 5, 7, 13]

このように、ネストされたリストの開始インデックスは、基本的なループ処理でも、関数型スタイルのユーティリティを使っても簡単に求められます。データのフラット化や区間管理など、さまざまな場面で応用できるテクニックです。

  1. Pythonでリスト内の要素のインデックスを取得する方法

    index()メソッドで最初の出現位置を取得する リスト(文字列やタプルなど、他のシーケンス型でも同様)に用意されている index() メソッドを使うと、特定の要素が最初に出現する位置(インデックス)を簡単に見つけることができます。 >>> L1=[a, b, c, a, x] >>> L1 [a, b, c, a, x] >>> L1.index(a) 0 この例では、リスト L1 の中で a が最初に出現するのはインデックス 0 の位置であるため、0 が返されます。なお、指定した要素がリスト内に存在しない場合は ValueError

  2. Pythonリスト入門:作成から操作、削除まで徹底解説

    このチュートリアルでは、Pythonのリスト(List)について学びます。リストの作成方法、要素へのアクセス、要素の追加・削除、リスト自体の削除など、基本的な操作を一つずつ丁寧に解説していきます。 Pythonでは、リストは角括弧 [] を使って構築し、各要素はカンマ , で区切って記述します。 Pythonのリストは、異なる型のオブジェクトを混在させて格納できるのが特徴です。すべて文字列である必要も、整数である必要もありません。例えば、以下のように複数の型が混ざったリストを作成できます。mixedTypesList = [a, True, 1, 1.0] リストの作成方法 リストは、角括弧