1. ホーム
  2. python

[解決済み] 2つの文字列を連結するのに '+' を使用しない理由は何ですか?

2022-06-17 02:37:58

質問

Pythonでよくあるアンチパターンは、一連の文字列を連結する際に + を使って文字列を連結することです。これは、Pythonインタプリタが各反復のために新しい文字列オブジェクトを作成しなければならず、結局二次関数的な時間がかかるため、よくありません。(CPythonの最近のバージョンは明らかにこれを最適化できる場合がありますが、他の実装ではできないので、プログラマはこれに依存しないようにしましょう)。 ''.join はこれを行う正しい方法です。

とはいうものの、( Stack Overflow のここも含めて ) では 決して、決して 使用する + を使用し、文字列の連結には常に ''.join またはフォーマット文字列を使用します。2つの文字列を連結するだけなら、なぜそうなるのか理解できません。私の理解が正しければ、2次関数的な時間はかからないはずですし、私は a + b の方がすっきりしていて読みやすいと思います。 ''.join((a, b)) または '%s%s' % (a, b) .

を使用するのは良い習慣ですか? + を使用して2つの文字列を連結することは良いことでしょうか?それとも、私が知らない問題があるのでしょうか?

どのように解決するのですか?

を連結することは問題ありません。 2 という文字列を + . 確かに ''.join([a, b]) .

しかし、2つ以上の文字列を連結して + の場合はO(n)であるのに対し、O(n^2)であることは確かです。 join に対して)O(n^2)演算となり、非効率になります。しかし、これはループを使うこととは関係ない。さらに a + b + c + ... はO(n^2)であり、その理由は各連接が新しい文字列を生成するためです。

CPython2.4以降ではそれを軽減しようとしていますが、やはり join を使うことをお勧めします。