Эффективная генерация строк в Python3
Primary tabs
Всем привет, сегодня расскажу немного об эффективной работе со строками.
Мне однажды понадобилось для реализации небольшой библиотечки побитовых операций над числами заданными в фиксированном битовом представлении (по длинне) сгенерировать строки из единиц определённой длины, и захотелось сделать это быстро. И вот что я получил.
1) Первое что приходит на ум - воспользоваться обычным циклом и операцией конкатенации, примерно так:
s = '' for i in range(0, 1000000): s += '1'
Это самый неэффективный способ генерации строки, он может быть применён если вычисления "прибавляемой" строки довольно сложное, проходит много условных переходов и не факт что вообще при определённых обстоятельствах это значение участвует в конкатенации. Для моей задачи - это было жуууутко медленно.
2) После активного гугления я обнаружил, что операция join для списков работает довольно шустро. И вправду такое работает шустро:
res = ''.join(['1' for i in range(0, 1000000)])
Круто. Но всёже для моей задачи генерировать список, а потом объединять его - это накладно. Для генерации строк, в которых эти значения разные, и если это можно получить генератором - то такой способ самый выгодный, точно выгоднее предыдущего. Но но но.....
3) Третий способ мне подсказали друзья, они провели серию экспериментов - я их подтвердил. Для моей задачи можно воспользоваться всего одним оператором:
s = '1' * 1000000
Работает в разы быстрее предыдущих вариантов. И самый простой и читаемый.
Надеюсь это поможет вам в эффективном программировании на Python 3.
- Log in to post comments
- 4575 reads
vedro-compota
Tue, 10/01/2013 - 17:53
Permalink
задача весьма специфичная))
задача весьма специфичная))
но и решение весьма неожиданное и изящное во всех смыслах! спасибо!)
_____________
матфак вгу и остальная классика =)