2015-04-20 2 views
0

В C++ есть вектор :: reserve(), чтобы эффективно выделять память заранее при построении строки. Даже без него мы можем построить строку в O (n), амортизированную.Эффективное строковое построение с неизменяемыми строками

Как эффективно создавать строки в языках, где строки неизменяемы, например python? Наивный метод добавления атома за раз, который отлично работает в C++ в O (n), представляется O (n^2), генерируя мусор для gc для O (n^2).

+0

В Python вы обычно используете 'str.join()', который не собирается объединять кучу строк вместе под капотом (по крайней мере, в CPython). – Blender

ответ

1

Обычный способ борьбы с этим в Python состоит в том, чтобы сгенерировать список строк (или использовать генератор) и вызвать join, чтобы объединить их.

final_string = ''.join(substring for substring in my_generator()) 
Смежные вопросы