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

Pythonで2つの文字列を交互にマージするプログラムの書き方

同じ長さを持つ2つの文字列 st が与えられたとします。このとき、両者の文字を交互に取り出して連結し、新しい1つの文字列を作ることを考えます。具体的には、s[i]t[i] を連結し、その後インデックスを1つ進めて同じ操作を繰り返していくイメージです。

たとえば、入力が s = "hello"t = "world" の場合、出力は "hweolrllod" となります。先頭から順に h・w・e・o・l・r・l・l・o・d と交互に並んでいることが確認できますね。

解決のための手順

この問題を解くには、以下のステップに従います。

  • ステップ1: Python組み込みの zip() 関数を使い、st を対応する位置ごとにペア (s[i], t[i]) としてまとめます。
  • ステップ2: 各ペアに対して s[i] + t[i] のように文字列を連結し、新しいリストを作成します。
  • ステップ3: join() メソッドでリスト内のすべての要素を1つの文字列に結合し、結果として返します。

実装例

それでは、実際のコードを見てみましょう。

def solve(s, t):
    zipped = list(zip(s, t))
    zipped = map(lambda x: x[0]+x[1], zipped)
    return ''.join(zipped)

s = "hello"
t = "world"
print(solve(s, t))

入力

"hello", "world"

出力

hweolrllod

コードの解説

まず list(zip(s, t)) によって、[('h', 'w'), ('e', 'o'), ('l', 'r'), ('l', 'l'), ('o', 'd')] というペアのリストが生成されます。次に map() とラムダ式 lambda x: x[0]+x[1] を組み合わせることで、各タプルの第1要素と第2要素を連結し、'hw''eo''lr'... という文字列のシーケンスを作ります。最後に ''.join() でこれらをすべてつなげれば、目的の交互マージ文字列が完成します。

なお、処理は文字列の長さ n に対して O(n) の時間計算量で動作するため、非常に効率的です。また、itertools.chain.from_iterable(zip(s, t)) を使うなど、より簡潔な別の実装方法も存在しますので、興味があれば試してみてください。

  1. 【Python入門】2つの文字列から珍しい単語(ユニークな単語)を見つけるプログラムの作り方

    はじめに この記事では、以下の問題文に対する解決方法を、実際のコード例とともにわかりやすく解説します。 問題文 2つの文字列が与えられたとき、その中から「珍しい単語」(どちらか一方の文字列にしか出現しない単語)をすべて抽出することを目標とします。両方の文字列に共通して含まれる単語は除外します。 解決のアプローチ ここでは辞書(dict)を使った出現回数のカウント方式を採用します。手順は次のとおりです。 空の辞書を用意する 各文字列をsplit()で単語ごとに分割する 各単語の出現回数を辞書に記録する 出現回数がちょうど1回の単語だけを結果として返す 実装例 # 珍しい単語を見つける関

  2. Pythonでマージソートを実装する方法を徹底解説!サンプルコード付き

    この記事では、マージソート(Merge Sort)のアルゴリズムを使って配列を並べ替えるPythonプログラムについて、実際のコード例を交えながら詳しく解説します。 問題設定 課題 − 与えられた配列を、マージソートの考え方を用いて昇順に並べ替えます。 マージソートは分割統治法に基づく整列アルゴリズムです。まず配列を半分ずつ再帰的に分割し、要素が1つになった時点でそれを「ソート済み」とみなします。その後、隣り合う部分配列同士を先頭から比較しながら統合(マージ)していくことで、最終的に配列全体が整列されます。 Pythonでの実装例 # マージ関数 def merge(arr, l, m,