最高の文字列変数に文字列を追加する方法は、使用することです+
か+=
。これは、読みやすく、高速だからです。それらも同じくらい速く、どちらを選択するかは好みの問題であり、後者が最も一般的です。timeit
モジュールのタイミングは次のとおりです。
a = a + b:
0.11338996887207031
a += b:
0.11040496826171875
ただし、リストを作成してリストに追加してからそれらを結合することをお勧めする場合は、リストに文字列を追加する方が、文字列を拡張する場合と比較して非常に高速であるためです。そして、これはいくつかのケースで本当である場合があります。たとえば、ここでは1文字の文字列を最初に文字列に、次にリストに100万回追加しています。
a += b:
0.10780501365661621
a.append(b):
0.1123361587524414
OK、結果の文字列が100万文字である場合でも、追加はさらに高速でした。
次に、1000文字の長い文字列を10万回追加してみましょう。
a += b:
0.41823482513427734
a.append(b):
0.010656118392944336
したがって、終了文字列は最終的に約100MBになります。これはかなり遅く、リストへの追加ははるかに高速でした。そのタイミングにはファイナルが含まれていないことa.join()
。それでは、どれくらい時間がかかりますか?
a.join(a):
0.43739795684814453
おっと。この場合でも判明しますが、追加/結合は遅くなります。
それで、この勧告はどこから来たのですか?Python 2?
a += b:
0.165287017822
a.append(b):
0.0132720470428
a.join(a):
0.114929914474
まあ、極端に長い文字列を使用している場合は、追加/結合がわずかに高速になります(通常は使用しませんが、メモリ内で100MBの文字列は何でしょうか?)
しかし、実際のクリンチャーはPython 2.3です。タイミングが遅いのでまだ終わっていないので、タイミングは表示しません。これらのテストは突然数分かかります。後のPythonと同じくらい高速な追加/結合を除きます。
うん。文字列の連結は、石器時代のPythonでは非常に低速でした。しかし、2.4では(または少なくともPython 2.4.7)でなくなったため、append / joinの使用に関する推奨事項は、Python 2.3の更新が中止された2008年に古くなり、使用を中止する必要がありました。:-)
(更新:Python 2.3で2つの文字列を使用する+
とテストがより慎重に行われたときに判明し、+=
2つの文字列の方が高速であることがわかりました。使用するための推奨''.join()
は誤解であるに違いありません)
ただし、これはCPythonです。他の実装には他の懸念があるかもしれません。そしてこれは、時期尚早な最適化がすべての悪の根源であるもう1つの理由です。最初に測定しない限り、「より高速」であると思われる手法を使用しないでください。
したがって、文字列連結を行うための「最良の」バージョンは、+または+ =を使用することです。そして、それがあなたにとって遅くなることが判明した場合、それはかなりありそうもないことですが、他のことをしてください。
では、なぜコードで多くの追加/結合を使用するのですか?時々それが実際にはっきりしているからです。特に、一緒に連結する必要があるものはすべて、スペース、コンマ、または改行で区切る必要があります。