Pythonの文字列オブジェクトは変更不可能です。従って、2つの文字列を連結するたびに、新しい文字列が作成されます。多くの文字列を追加する必要がある場合、+演算子を使用すると最終結果を得る前に多くの一時文字列が不必要に作成されます。
Python文字列の追加
文字列を「n」回連結する関数を見てみましょう。
def str_append(s, n):
output = ''
i = 0
while i < n:
output += s
i = i + 1
return output
この関数は+演算子の使用方法を紹介するために定義していることに注意してください。後でパフォーマンスをテストするためにtimeitモジュールを使用します。単に文字列を「n」回連結したい場合は、s = 'Hi' * 10
と簡単に行うことができます。
文字列の追加操作を行う別の方法は、リストを作成し、文字列をリストに追加することです。そして、文字列のjoin()関数を使用してそれらを結合して結果の文字列を取得します。
def str_append_list_join(s, n):
l1 = []
i = 0
while i < n:
l1.append(s)
i += 1
return ''.join(l1)
これらの方法が正しく動作することを確認するために、これらのメソッドをテストしましょう。
if __name__ == "__main__":
print('Append using + operator:', str_append('Hi', 10))
print('Append using list and join():', str_append_list_join('Hi', 10))
# このケースでは以下を使用し、上記の方法は
# timeitモジュールを使用してパフォーマンスをチェックするために作成されています
print('Append using * operator:', 'Hi' * 10)
出力:
Append using + operator: HiHiHiHiHiHiHiHiHiHi
Append using list and join(): HiHiHiHiHiHiHiHiHiHi
Append using * operator: HiHiHiHiHiHiHiHiHiHi
Pythonで文字列を追加する最良の方法
I have both the methods defined in string_append.py
file. Let’s use timeit module to check their performance.
$ python3.7 -m timeit --number 1000 --unit usec 'import string_append' 'string_append.str_append("Hello", 1000)'
1000 loops, best of 5: 174 usec per loop
$ python3.7 -m timeit --number 1000 --unit usec 'import string_append' 'string_append.str_append_list_join("Hello", 1000)'
1000 loops, best of 5: 140 usec per loop
$ python3.7 -m timeit --number 1000 --unit usec 'import string_append' 'string_append.str_append("Hi", 1000)'
1000 loops, best of 5: 165 usec per loop
$ python3.7 -m timeit --number 1000 --unit usec 'import string_append' 'string_append.str_append_list_join("Hi", 1000)'
1000 loops, best of 5: 139 usec per loop
要約
文字列が少ない場合は、任意の方法で追加できます。可読性の観点からは、「+」演算子を使用する方が少ない文字列には良いように思えます。ただし、多くの文字列を追加する場合は、リストとjoin()関数を使用する必要があります。
完全なPythonスクリプトとPythonの他の例は、私たちのGitHubリポジトリから確認できます。
Source:
https://www.digitalocean.com/community/tutorials/python-string-append