Pythonでサフィックス(末尾の文字)を使って文字列をK文字ごとにグループ化する方法
文字列リストを「末尾のK文字(サフィックス)」をキーにしてグループ化したい場合、シンプルなループ処理と try / except ブロックを組み合わせることで実現できます。この記事では、その具体的な実装方法と動作の仕組みを解説します。
サフィックスによるグループ化とは
たとえば、「peek」「leak」「creek」といった単語は、いずれも末尾が「eek」で終わっています。このように共通する末尾の文字列を持つ単語同士をまとめたいときに、今回紹介する手法が役立ちます。
コード例
以下は、実際にサフィックスでグループ化を行うPythonプログラムです。
my_list = ['peek', "leak", 'creek', "weak", "good", 'week', "wood", "sneek"]
print("元のリスト:")
print(my_list)
K = 3
print("K の値:")
print(K)
my_result = {}
for element in my_list:
suff = element[-K:]
try:
my_result[suff].append(element)
except:
my_result[suff] = [element]
print("グループ化の結果:")
print(my_result)
実行結果
元のリスト:
['peek', 'leak', 'creek', 'weak', 'good', 'week', 'wood', 'sneek']
K の値:
3
グループ化の結果:
{'ood': ['good', 'wood'], 'eak': ['leak', 'weak'], 'eek': ['peek', 'creek', 'week', 'sneek']}
コードの解説
リストの定義と表示: グループ化対象となる文字列のリストを定義し、コンソールに出力します。
K の設定: 末尾から何文字をキーとして使うかを変数
Kに代入します。ここでは 3 文字を指定しています。空の辞書を作成: 結果を格納するための空の辞書
my_resultを用意します。リストを反復処理:
forループで各要素を順番に取り出します。サフィックスの抽出: スライス記法
element[-K:]を使い、文字列の末尾 K 文字を取得して変数suffに代入します。try ブロック: 辞書にすでに同じサフィックスのキーが存在する場合は、
append()メソッドでその要素を既存のリストに追加します。except ブロック: キーがまだ存在しない場合(KeyError が発生した場合)は、新しいキーを作成し、その要素を含むリストを登録します。
結果の出力: 最後に、サフィックスごとにグループ化された辞書をコンソールに表示します。
補足:defaultdictを使ったより簡潔な書き方
try / except を使う代わりに、標準ライブラリの collections.defaultdict を利用すると、同じ処理をより簡潔に書くこともできます。
from collections import defaultdict my_result = defaultdict(list) for element in my_list: my_result[element[-K:]].append(element) print(dict(my_result))
この方法では、存在しないキーにアクセスした際に自動的に空のリストが生成されるため、例外処理を明示的に書く必要がありません。状況に応じて使い分けるとよいでしょう。
-
【Python】文字列の長さに基づいてリストを並べ替える方法
文字列のリストがあり、その長さを基準にリストを並べ替えたいとします。つまり、短い文字列から長い文字列へと昇順に整列させる必要があります。これを実現するには、独自のアルゴリズムを書くか、Pythonの組み込みメソッドであるsort()や関数sorted()を、キー(key)引数と組み合わせて使用するのが便利です。実行例まず、どのような動作になるのか例で確認しましょう。入力: strings = [hafeez, aslan, honey, appi] 出力: [appi, aslan, honey, hafeez]それでは、sorted(key)関数とsort(key)メソッドを使ったプログラム
-
Pythonで3Dリスト(3次元配列)を作成する方法【サンプルコード付き】
3Dリストとは、いわゆる3次元配列のことです。本記事では、Pythonで3Dリストを作成し、その内容を整形して出力するプログラムを解説します。ここでは例として、文字列「*」を初期値とする3×2×2の3次元リストを生成しますが、仕組みを理解すれば整数など任意の要素を持つ配列にも簡単に応用できます。 3Dリストのイメージ 3次元リストは、リストの中にリスト、さらにその中にリストが入った多段構造のデータです。たとえば、3×3×2の3Dリストは次のように表現できます。 [[1,1,1],[2,2,2],[3,3,3]], [[4,4,4],[5,5,5],[6,6,6]] アルゴリズム ステップ1: