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

Pythonでリスト内の各要素のインデックスを辞書として取得する方法

リスト内の各要素がどのインデックス位置に出現するかをまとめた「インデックスの一覧(ディレクトリ)」を作成したい場合、リスト内包表記set()関数を組み合わせると、簡潔かつ効率的に実現できます。

サンプルコード

以下に具体的な実装例を示します。

my_list = [81, 36, 42, 57, 68, 12, 26, 26, 38]

print("元のリスト:")
print(my_list)

my_result = {key: [index for index, value in enumerate(my_list) if value == key]
   for key in set(my_list)}

print("結果:")
print(my_result)

出力結果

元のリスト:
[81, 36, 42, 57, 68, 12, 26, 26, 38]
結果:
{36: [1], 68: [4], 38: [8], 42: [2], 12: [5], 81: [0], 57: [3], 26: [6, 7]}

処理の解説

  • まず、整数値を含むリストを定義し、コンソールに表示します。

  • 外側の辞書内包表記では set(my_list) を使ってリストから重複を除いたユニークな値をキーとして取り出します。これにより、同じ要素に対して何度も走査する無駄を省けます。

  • 内側のリスト内包表記では enumerate() を使ってリストを走査し、値がキーと一致するすべてのインデックスを収集します。このため、重複している要素(例の 26)は [6, 7] のように複数のインデックスを持つリストになります。

  • 最終的に「要素 → インデックスのリスト」という形式の辞書が生成され、変数に代入されます。

  • その変数を出力することで、各要素の出現位置をひと目で確認できる結果が得られます。

補足:defaultdictを使った別の書き方

より読みやすくしたい場合は、collections.defaultdict を使う方法もあります。

from collections import defaultdict

my_list = [81, 36, 42, 57, 68, 12, 26, 26, 38]

index_map = defaultdict(list)
for index, value in enumerate(my_list):
    index_map[value].append(index)

print(dict(index_map))
# {81: [0], 36: [1], 42: [2], 57: [3], 68: [4], 12: [5], 26: [6, 7], 38: [8]}

どちらの方法でも同じ結果が得られますが、大規模なデータを扱う場合は defaultdict の方がリスト全体を繰り返し走査しないため効率的です。

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

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

  2. 【初心者向け】Pythonでリストのサイズ(要素数)を取得する方法

    リスト(list)は、Pythonにおける代表的なコレクション型のデータ構造の一つです。リストの要素は後から変更でき、重複した値を持つこともできます。本記事では、Pythonでリストのサイズ(長さ)を取得する方法を解説します。具体的には、重複の有無にかかわらず、リストに含まれる全要素の数をカウントする方法を紹介します。リストの長さを取得する基本:len()関数Pythonでリストの要素数を取得するには、組み込み関数の len() を使用します。len() はリストだけでなく、タプル・文字列・辞書などさまざまなコレクションに対しても利用できる汎用的な関数です。サンプルコード以下の例では、「day