Home

Tags

Ускорение сложения строк посредством join

2011-03-24 python performance

При генерации большого количества текстовой (например генерации web страницы) информации желательно не делать частое сложение в одну строку т.к. при увеличении большой строки происходит создание ещё большей строки и копирование туда данных. В данной статье приведен сравнительный тест сложения с помощью массива и join.

# coding: utf8

from timeit import Timer

word = u'0123456789abcdef'
count = 10

def test():
    s = u''
    for i in xrange(count):
        s += word

def test_join():
    s = []
    for i in xrange(count):
        s.append(word)
    s = u''.join(s)

for i in xrange(4):
    count *= 10
    print '---'
    print 'count:', count
    s = Timer("test()", "from __main__ import test").timeit(number=1)
    j = Timer("test_join()", "from __main__ import test_join").timeit(number=1)
    print 'str    %.4f' % s
    print 'join   %.4f' % j
    print 'diff   %.4f' % (s/j)

Результат
count - кол-во сложений
str - продолжительность сложений строки (секунд)
join - продолжительность сложений через массив и join (секунд)
diff - разница между str и join
count: 100
str    0.0000
join   0.0000
diff   1.9300
---
count: 1000
str    0.0026
join   0.0002
diff   16.7831
---
count: 10000
str    1.0272
join   0.0017
diff   592.7783
---
count: 100000
str    226.2851
join   0.0179
diff   12633.2215


В итоге на больших данных, сложение через массив с join-ом выполняется быстрее сложений строк в тысячи раз.