1. ホーム
  2. python

[解決済み] Pythonで最も効率的な文字列の連結方法は何ですか?

2022-04-21 19:27:11

質問

Pythonで効率的に大量の文字列を連結する方法(例えば ストリングビルダー C#の 文字列バッファ をJavaで作成した場合)?私は次のメソッドを見つけました。 こちら :

  • を使った簡単な連結 +
  • 文字列リストと join メソッド
  • 使用方法 UserString から MutableString モジュール
  • 文字配列と array モジュール
  • 使用方法 cStringIO から StringIO モジュール

しかし、専門家の皆さんは何を使い、何を提案しているのか、そしてその理由は?

[ 関連する質問はこちら ]

解決方法を教えてください。

Python 3.6 では、既知のコンポーネントを文字列連結する際に 文字列の補間 .

のテストケースがあるとします。 mkoistinenさんの回答 文字列

domain = 'some_really_long_example.com'
lang = 'en'
path = 'some/really/long/path/'

競合他社は

  • f'http://{domain}/{lang}/{path}' - 0.151 µs

  • 'http://%s/%s/%s' % (domain, lang, path) - 0.321 µs

  • 'http://' + domain + '/' + lang + '/' + path - 0.356 µs

  • ''.join(('http://', domain, '/', lang, '/', path)) - 0.249 μs(一定長のタプルの構築は、一定長のリストの構築よりわずかに速いことに注意してください)。

このように、現在、最も短く、最も美しいコードは、最も速いということでもあります。

Python 3.6 のアルファバージョンでは f'' 文字列は 最も遅い とほぼ同等のバイトコードが生成されます。 ''.join() の呼び出しが不要な場合 str.__format__ を返すだけで、引数なしだと self は変更されません。これらの非効率性は3.6 finalの前に対処されました。

この速度は、Python 2の最速メソッドである次のものと対比できます。 + 私のコンピュータでは、連結は 0.203 µs、8ビット文字列では 0.259 µs となります。