Python で同等の Stringbuilder

Manav Narula 2023年1月30日
  1. join() 関数を使用する
  2. 文字列連結メソッドを使用する
  3. StringIO モジュールを使用する
Python で同等の Stringbuilder

文字列は文字のコレクションであり、不変のオブジェクトです。既存のブロックを変更するのではなく、文字列を変更するたびに新しいメモリブロックを指定する必要があります。

C 言語のの StringBuilder クラスは、可変の文字列オブジェクトを作成し、動的なメモリ割り当てを可能にします。Python にはそのような計算はありませんが、文字列連結を使用してこれを実現し、長く効率的な文字列オブジェクトを作成できます。

この背後にある主なアイデアは、文字列のリストを取得し、それらを結合して大きな文字列を作成することです。

join() 関数を使用する

リストから文字列を結合するには、join() 関数を使用できます。join() メソッドは、反復可能なオブジェクトのすべての要素を結合した後、文字列を返します。次のコードスニペットはこれを説明しています。

mylist = ["abcd" for i in range(5)]
mystring = "".join(mylist)
print(mystring)

出力:

abcdabcdabcdabcdabcd

リストから文字列を連結する方法は他にもたくさんありますが、join() 関数はそれらすべての中で最も高速であると考えられています。

文字列連結メソッドを使用する

for ループと+ 演算子を使用して、リストから文字列を簡単に連結できます。次の例はその方法を示しています。

mylist = ["abcd" for i in range(5)]
mystring = ""
for i in range(len(mylist)):
    mystring += mylist[i]
print(mystring)

出力:

abcdabcdabcdabcdabcd

StringIO モジュールを使用する

StringIO モジュールは、メモリバッファ内の文字列の読み取りと書き込みに使用できます。StringIO オブジェクトを作成し、リストをループした後、このオブジェクトに書き込みます。getvalue() メソッドを使用して、必要な文字列を出力できます。例えば、

file_str = StringIO()
for i in range(len(mylist)):
    file_str.write(mylist[i])
print(file_str.getvalue())

出力:

abcdabcdabcdabcdabcd

StringIO モジュールの関数を使用して文字列を追加できる独自のクラスを作成することもできます。例えば、

from io import StringIO


class StringBuilder:
    _file_str = None

    def __init__(self):
        self._file_str = StringIO()

    def Append(self, str):
        self._file_str.write(str)

    def __str__(self):
        return self._file_str.getvalue()


sb = StringBuilder()

sb.Append("Hello ")
sb.Append("World")

print(sb)

出力:

Hello World
著者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

関連記事 - Python String