Каков самый эффективный метод конкатенации строк в Python?

Python

  • , медленный
  • , я наконец привык к оператору печати, и теперь существует эта функция печати??? (py3k)
  • никогда не получал py2exe или cxFreeze работа
  • не стандартизированный (незначительные мелочные придирки)
  • глубина рекурсии только 100 (iirc)
131
задан Community 23 May 2017 в 12:34
поделиться

3 ответа

Вас может заинтересовать следующее: Анекдот оптимизации , сделанный Гвидо. Хотя стоит также помнить, что это старая статья и она предшествовала существованию таких вещей, как ''. Join (хотя я думаю, что string.joinfields более или менее является то же самое)

В силу этого array модуль может быть самым быстрым, если вы сможете втиснуть в него свою проблему. Но ''. Join , вероятно, достаточно быстро и имеет то преимущество, что он идиоматичен и, следовательно, его легче понять другим программистам на Python.

Наконец, золотое правило оптимизации: don Не оптимизируйте, если не знаете, что вам нужно, и измеряйте, а не гадайте.

Вы можете измерять различные методы, используя модуль timeit . Это может сказать вам, какой из них самый быстрый, вместо того, чтобы делать предположения случайным людям в Интернете.

117
ответ дан 24 November 2019 в 00:15
поделиться

Это зависит от того, что вы делаете.

После Python 2.5 конкатенация строк с оператором + выполняется довольно быстро. Если вы просто объединяете пару значений, лучше всего работает оператор +:

>>> x = timeit.Timer(stmt="'a' + 'b'")
>>> x.timeit()
0.039999961853027344

>>> x = timeit.Timer(stmt="''.join(['a', 'b'])")
>>> x.timeit()
0.76200008392333984

Однако, если вы объединяете строку в цикл, лучше использовать метод объединения списков:

>>> join_stmt = """
... joined_str = ''
... for i in xrange(100000):
...   joined_str += str(i)
... """
>>> x = timeit.Timer(join_stmt)
>>> x.timeit(100)
13.278000116348267

>>> list_stmt = """
... str_list = []
... for i in xrange(100000):
...   str_list.append(str(i))
... ''.join(str_list)
... """
>>> x = timeit.Timer(list_stmt)
>>> x.timeit(100)
12.401000022888184

. ... но обратите внимание, что вам нужно собрать относительно большое количество строк, прежде чем разница станет заметной.

37
ответ дан 24 November 2019 в 00:15
поделиться

''. Join (sequenceofstrings) - это то, что обычно работает лучше всего - самое простое и быстрое.

58
ответ дан 24 November 2019 в 00:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: