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

Python – 文字列リストにおける文字とインデックスのマッピング方法


文字列のリストを扱う際、「各文字がどのインデックス(位置)に出現するか」をマッピングしたいケースがあります。このような場合、シンプルな反復処理、リスト内包表記、そして「add」メソッドを組み合わせることで効率的に実現できます。

サンプルコード

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

from collections import defaultdict

my_list = ['p y t h o n', 'i s', 'f u n', 't o', 'l e a r n']

print("The list is :")
print(my_list)

my_result = defaultdict(set)

for index, element in enumerate(my_list):
    for sub in element.split():
        my_result[sub].add(index + 1)

my_result = {key: list(val) for key, val in my_result.items()}

print("The result is :")
print(my_result)

出力結果

The list is :
['p y t h o n', 'i s', 'f u n', 't o', 'l e a r n']
The result is :
{'p': [1], 'y': [1], 't': [1, 4], 'h': [1], 'o': [1, 4], 'n': [1, 3, 5], 'i': [2], 's': [2], 'f': [3], 'u': [3], 'l': [5], 'e': [5], 'a': [5], 'r': [5]}

解説

  • まず、collections モジュールから defaultdict を環境にインポートします。

  • スペース区切りの文字列を要素とするリストを定義し、コンソールに表示します。

  • defaultdict を使って空の辞書を作成します。値の初期型として set(集合)を指定することで、重複するインデックスが自動的に除外されます。

  • enumerate 関数を使ってリストを反復処理し、各要素とそのインデックスを同時に取得します。

  • split メソッドで各要素を空白ごとに分割し、add メソッドを使って辞書の該当するキーにインデックス(1始まり)を追加します。

  • 辞書内包表記を使って、set 型の値を list 型へ変換します。これにより、通常の辞書として扱いやすい形式になります。

  • 変換後の結果を変数に代入します。

  • 最終的に、文字ごとのインデックス一覧がコンソールに出力されます。

なお、defaultdict を使用するメリットは、存在しないキーにアクセスした際に KeyError が発生せず、自動的に初期値(ここでは空の集合)が生成される点です。これにより、キーの存在チェックを行うコードを書く必要がなく、処理を簡潔に記述できます。

  1. Pythonでリストを文字列に変換する4つの方法を徹底解説

    Pythonでは、リスト(list)の要素をひとつの文字列(str)にまとめたい場面がよくあります。例えば、単語のリストを連結して文章を作ったり、データをCSV形式の文字列に整形したりするケースです。本記事では、リストを文字列へ変換する代表的な4つのアプローチを、サンプルコードと実行結果とともにわかりやすく解説します。 課題の概要 問題設定: リスト型のイテラブルが与えられたとき、それを文字列型に変換することを目標とします。 この問題には主に以下の4つの解決策があります。順番に見ていきましょう。 方法1:素朴なループ処理(総当たり方式) 最も基本的な方法は、空の文字列を用意し、forループ

  2. Pythonで日付文字列のリストを並べ替える方法

    Pythonで日付形式の文字列が格納されたリストを正しく並べ替えるには、sort関数を使うだけでは不十分です。日付文字列は辞書順に比較されるため、そのままソートすると意図した順序になりません。そこで、各日付文字列をdatetimeオブジェクトに変換し、その値を基準にソートする必要があります。具体的には、sort関数のkey引数を利用します。key引数にはラムダ式(無名関数)を渡し、その中でdatetime.strptime()を使って各日付文字列をdatetimeオブジェクトに変換します。こうすることで、Pythonはこのdatetimeオブジェクト同士を比較してリストを時系列順に並べ替えてく