Python – アルファベット順に連続する文字を含む文字列を抽出する方法
文字列の中に、アルファベット順に連続した文字(例:「h」の次に「i」)が含まれているかどうかを判定し、該当する文字列だけを抽出したいケースはよくあります。Pythonでは、シンプルな反復処理と、文字のUnicodeコードポイントを取得できるordメソッドを組み合わせることで、この処理を簡単に実装できます。
サンプルコード
以下に具体的な実装例を示します。
my_list = ["python", 'is', 'cool', 'hi', 'Will', 'How']
print("The list is :")
print(my_list)
my_result = []
for element in my_list:
for index in range(len(element) - 1):
if ord(element[index]) == ord(element[index + 1]) - 1:
my_result.append(element)
break
print("The result is :")
print(my_result)
出力結果
The list is : ['python', 'is', 'cool', 'hi', 'Will', 'How'] The result is : ['hi']
コードの解説
まず、複数の文字列を含むリストを定義し、コンソールに表示します。
次に、抽出結果を格納するための空のリストを用意します。
外側のループでリスト内の各文字列を1つずつ取り出し、内側のループでその文字列内の隣り合う2文字を順番に比較していきます。
ord関数は文字をUnicodeのコードポイント(整数値)に変換します。隣接する2文字のコードポイントの差がちょうど1であれば、その2文字はアルファベット順に連続していると判断できます。条件を満たす文字列が見つかったら、その文字列を結果リストに追加し、
break文で内側のループを抜けます。これにより、同じ文字列が重複して追加されるのを防いでいます。最後に、条件を満たした文字列だけが格納されたリストをコンソールに出力します。
動作のポイント
この例では「hi」のみが結果として抽出されています。「h」のUnicodeコードポイントは104、「i」は105であり、差がちょうど1になるためです。一方、「python」や「cool」、「Will」、「How」には連続したアルファベットが含まれていないため、結果から除外されます。
-
2つの文字列の共通文字をアルファベット順に出力するPythonコード
ユーザーから入力された2つの文字列が与えられたとき、両方の文字列に共通して含まれる文字をすべて抽出し、アルファベット順に並べて出力する方法を解説します。Python標準ライブラリの collections.Counter を使えば、わずか数行でこの処理を実装できます。実行例入力:string1: pythonstring2: program出力: op解説上の例では、「python」と「program」の両方に含まれる文字は「o」と「p」であり、それぞれ1回ずつ出現します。そのため、アルファベット順に並べた結果は「op」となります。アルゴリズムこの問題は、Counterオブジェクトの集合演算を
-
Pythonでリストを出力する方法|インデックスの基本から実践的な出力テクニックまで
Pythonのリストとは? Pythonのリスト(list)は、複数の要素をひとつにまとめて管理できるデータ型です。リスト内の各要素は順序を持って格納されており、それぞれの位置(インデックス)を指定することで、任意の要素にアクセスできます。 インデックスは0から始まる リストのインデックスは0から始まる点に注意が必要です。つまり、最初の要素が list[0]、2番目の要素が list[1]、3番目の要素が list[2] に対応します。 例えば、以下のようなリストを考えてみましょう。 numbers = [10, 20, 50, 40] print(numbers[2]) # 出力結果:5