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

Pythonで文字列からn番目の文字を削除する方法

この記事では、「文字列から指定したインデックス(i番目)の文字を削除して表示する」という問題の解き方を解説します。

問題の概要

与えられた文字列から、指定されたインデックス位置にある1文字を取り除き、その結果を出力します。

Pythonでは文字列のインデックスは必ず0から始まる点に注意してください。たとえば「tutorialspoint」という文字列の場合、各文字とインデックスの対応は以下のようになります。

T u t o r i a l s p o i n t
0 1 2 3 4 5 6 7 8 9 10 11 12 13

それでは、この問題を解くためのPythonスクリプトを見ていきましょう。

実装例

def remove(string, i):
    # i番目の直前までをスライス
    a = string[ : i]
    # i+1番目以降をスライス
    b = string[i + 1: ]
    # 前半と後半を連結して返す
    return a + b

# ドライバーコード
if __name__ == '__main__':
    string = "Tutorialspoint"
    # 削除したいインデックスを指定
    i = 8
    print(remove(string, i))

出力結果

Tutorialpoint

インデックス8にあった「s」が削除され、「Tutorialpoint」という文字列が出力されました。

アルゴリズムの考え方

入力文字列からi番目の要素を取り除くには、次の手順を実行します。

  1. 文字列を「i番目より前の部分」と「i番目より後ろの部分」の2つに分割します。
  2. i番目の文字だけを除外した状態で、前半と後半を連結します。
  3. 連結した新しい文字列を返します。

この方法なら、イミュータブル(変更不可)であるPythonの文字列でも、元の文字列を壊すことなく安全に任意の1文字を削除できます。

別の書き方:1行で実現する方法

同じ処理は、スライスを組み合わせて1行で書くこともできます。

string = "Tutorialspoint"
i = 8
new_string = string[:i] + string[i+1:]
print(new_string)  # Tutorialpoint

また、str.join()とジェネレーター式を組み合わせる方法もあります。

new_string = ''.join(c for j, c in enumerate(string) if j != i)

まとめ

この記事では、Python 3.x(およびそれ以前のバージョン)において、文字列から指定したインデックスの文字を削除する方法を学びました。ポイントは「スライスで前後に分割し、再び連結する」というシンプルな発想です。文字列はイミュータブルなので、削除後の結果は必ず新しい文字列として受け取ることを覚えておきましょう。

  1. Pythonで文字列からn番目の文字を削除するプログラムの書き方

    はじめにこの記事では、以下の問題に対する解決方法を解説します。問題文 − 与えられた文字列から、指定したインデックス(i番目)の文字を削除し、その結果を表示します。Pythonの文字列では、インデックスは必ず0から始まるという点に注意してください。例えば、「Tutorialspoint」という文字列の場合、各文字のインデックスは以下のように対応しています。T u t o r i a l s p o i n t 0 1 2 3 4 5 6 7 8 9 10 11 12 13それでは、この問題を解決するためのPythonスクリプトを見ていきましょう。実装例def remove(string

  2. Pythonで文字列からn番目の文字を削除する方法【サンプルコード付き】

    Pythonにおいて、文字列は文字の配列として扱われます。そのため、先頭の文字のインデックスは「0」から始まり、各文字の位置(インデックス)を簡単に取得できます。この性質を利用すると、指定したn番目の文字だけを削除することが可能です。 基本的な考え方はシンプルです。削除したい文字のインデックス番号を受け取り、元の文字列を次の2つの部分文字列に分割します。 n番目のインデックスの文字より前の部分 n番目のインデックスの文字より後の部分 その後、この2つの部分文字列を連結すれば、n番目の文字が取り除かれた新しい文字列が完成します。 実行例 入力: python 削除するインデックス: 3 出