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

Pythonで選択的な連続サフィックス結合を実現する方法


文字列のリストを扱う際に、特定のサフィックス(接尾辞)を目印として、連続する要素同士を結合したいケースがあります。このような「選択的な連続サフィックス結合」は、単純なforループによる反復処理と、文字列メソッドのendswith、リストメソッドのappendjoinを組み合わせることで、シンプルに実現できます。

考え方

基本的な仕組みは以下の通りです。

  • リストの要素を順番に一時リストへ追加していきます。
  • 要素が指定したサフィックスで終わっていない場合、そこがグループの区切りとみなされ、それまでに蓄積した要素をjoinで連結して結果リストに格納します。
  • 一時リストを空にして、次のグループの処理に移ります。

サンプルコード

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

my_list = ["Python-", "fun", "to-", "code"]

print("リストの内容 :")
print(my_list)

suffix = '-'
print("サフィックス :")
print(suffix)

result = []
temp = []
for element in my_list:
   temp.append(element)

   if not element.endswith(suffix):
      result.append(''.join(temp))
      temp = []

print("結合結果 :")
print(result)

出力結果

リストの内容 :
['Python-', 'fun', 'to-', 'code']
サフィックス :
-
結合結果 :
['Python-fun', 'to-code']

コードの解説

  • まず、結合対象となる文字列のリストを定義し、コンソールに表示します。
  • 次に、判定の基準となるサフィックス(ここでは「-」)を定義して表示します。
  • 結合結果を格納するresultと、一時的に要素を蓄積するtempという2つの空リストを作成します。
  • 元のリストを1要素ずつ反復処理しながら、各要素を一時リストtempに追加していきます。
  • 要素が指定したサフィックスで終わっていない場合はグループの終端であるため、joinメソッドでtemp内の要素を連結し、その文字列をresultに追加します。
  • 連結後はtempを再度空にすることで、次のグループの蓄積を正しく開始できるようにしています。
  • すべての要素を処理し終えたら、最終的な結合結果がコンソールに出力されます。

この例では、「Python-」と「fun」、「to-」と「code」がそれぞれ1つのグループとして扱われ、['Python-fun', 'to-code']という結果が得られます。ハイフンなどの記号を区切り目にして文字列をグループ化したい場合に、この手法は非常に便利です。


  1. Pythonでリストのリスト(ネストされたリスト)をフラット化する3つの方法

    Pythonでは、ネストされたリスト(リストの中にリストが入った構造)を1次元のフラットなリストへ変換する(フラット化する)方法がいくつかあります。本記事では、代表的な3つの手法をコード例とともに解説します。 方法1:入れ子のforループを使う 最もシンプルで直感的なのが、二重のループを使う方法です。外側のループで親リストからサブリストを1つずつ取り出し、内側のループでそのサブリストから要素を1つずつ取得します。そして、各要素をあらかじめ用意した空のリスト(flat)に追加していきます。 L1=[[1,2],[3,4,5],[6,7,8,9]] flat=[] for i in L1:

  2. Pythonでリストから文字列を作成する方法|join()関数の使い方を解説

    Pythonのjoin()関数とはPythonには、シーケンス型(リストやタプルなど)の要素を連結して1つの文字列を生成するための組み込みメソッド join() が用意されています。join()は区切り文字(セパレーター)を持つ文字列に対して呼び出し、各要素の間にその区切り文字を挿入しながら要素を連結します。区切り文字が不要な場合は、空文字列()を使って呼び出すことで、要素をそのまま連結した文字列を取得できます。区切り文字なしで連結する例以下の例では、文字1つずつを格納したリストを、空文字列を介して連結しています。>>> lst = [h, e, l, l, o]>&g