【Python】文字列の指定した位置に文字列を挿入する方法

時計 2021.07.21 / 時計

【Python】文字列の指定した位置に文字列を挿入する方法

本記事ではPythonでの、文字列の指定した位置に別の文字列を挿入する方法について解説していきます。

Pythonにおいて文字列型(str)は変更不可のデータ型、つまりイミュータブルなので、そのままでは特定の位置に文字列を挿入することはできません。

しかしプログラムを作成していると、そういった場面が出てくることもあります。

どのようにすればイミュータブルな文字列に、別の文字列を挿入することができるかを見ていきましょう。

文字列は変更不可(イミュータブル)

文字列型とは

Pythonには値のカテゴリーとしていくつかのデータ型が存在します。
すべての値は必ず一つのデータ型に属します。

データ型には整数型(int)、文字列型(str)、浮動小数点数型(float)などがあります。

本記事では文字列を扱うので、文字列型(str)に別の文字列を挿入することができるか、ということが本題になります。

文字列型は整数型などと異なり、始まりと終わりを示すシングルクォートまたはダブルクォートで囲んで記述する必要があります。

>>> str = 'Hello, world!'

文字列の指定した位置に文字列を挿入できるか

では、いきなり本題の答えを記します。

文字列にはそのままの状態では、指定した位置に別の文字列を挿入できません。

「そのままの状態ではできない」ということなので、何かしらの処理をすれば可能であるということです。

ただ文字列の頭や末尾に文字列を追加することは、文字列連結演算子+を使用することで可能です。

>>> 'Hello' + ', world!'
'Hello, world!'

文字列型:イミュータブルなデータ型

データ型にはミュータブルなデータ型と、イミュータブルなデータ型に分けることができます。

ミュータブルなデータ型は変更可能なデータ型であり、イミュータブルなデータ型は変更ができないデータ型です。

リストはミュータブルなので、指定した位置に追加したり削除したりできます。
対して文字列はイミュータブルなので、そのままでは指定した位置に文字を追加することができません。

スライスを使用して、指定した位置に文字列を追加しようとするとTypeErrorが発生します。

>>> str = 'Hello, world!'
>>> str[7] = 'great '

Traceback (most recent call last)
TypeError: 'str' object does not support item assignment

文字列の指定した位置に文字列を挿入する方法

文字列の指定した位置に文字列を挿入する方法は次に示す2つの方法があります。

  • スライスと文字列連結演算子を使用する
  • 文字列をリストに変換する

それぞれの方法について次項から解説していきます。

また文字列中の任意の文字の後に文字を挿入したい場合は、その任意の文字の位置を知る必要があります。特定の文字列から任意の文字列の位置を取得する方法は以下記事を参考にしてください。

スライスと文字列連結演算子を使用する

文字列の指定した位置に文字列を挿入するためには、スライスと文字列連結演算子を使用することで実現可能になります。

スライスで文字列を切り取り、連結演算子で文字列を連結していくイメージです。

>>> str = 'Hello, world!'
>>> str[:7] + 'great ' + str[7:]
'Hello, great world!'

上記例のようにスライスと連結演算子を駆使することで、文字列を指定した位置に挿入することができます。

文字列をリストに変換する

文字列型(str)を一度リストに変換することで、指定した位置に文字を挿入することができます。

次の流れでリストに変換から文字列の挿入を行います。

  1. list()を使用して文字列をリストに変換
  2. insert()メソッドで指定した位置に文字列を挿入
  3. join()メソッドでリストを1つの文字列に連結

insert()メソッドはリストの指定した位置に別の要素を挿入するためのメソッドです。

リスト.insert(インデックス, 値)

join()メソッドはリストを1つの文字列に連結するのに有用です。

''.join(リスト)

以下に文字列をリストに変換して文字列を挿入する例を記します。

>>> str = 'Hello, world!'
>>> str_list = list(str)
>>> str_list.insert(7, 'great ')
>>> ''.join(str_list)
'Hello, great world!'

まとめ

本記事「【Python】文字列の指定した位置に文字列を挿入する方法」はいかがでしたか。

文字列はイミュータブルなデータ型のため、通常の方法では変更することができません。

本記事で紹介したようなlist()やjoin()メソッドを利用して、目的とする文字列を生成できるようにしましょう。