Я нахожу, что конкатенация строк, похоже, меньше байт-кода на python, чем объединение списка.Действительно ли список соединяется быстрее, чем конкатенация строк в python?
Это пример.
test.py:
a = ''.join(['a', 'b', 'c'])
b = 'a' + 'b' + 'c'
Тогда я исполню python -m dis test.py
. я получил следующий питона байткод (Python 2.7):
1 0 LOAD_CONST 0 ('') 3 LOAD_ATTR 0 (join) 6 LOAD_CONST 1 ('a') 9 LOAD_CONST 2 ('b') 12 LOAD_CONST 3 ('c') 15 BUILD_LIST 3 18 CALL_FUNCTION 1 21 STORE_NAME 1 (a) 3 24 LOAD_CONST 6 ('abc') 27 STORE_NAME 2 (b) 30 LOAD_CONST 4 (None) 33 RETURN_VALUE
Очевидно, что байткод число конкатенации является less.It только загрузка строки 'abc'
непосредственно.
Может ли кто-нибудь объяснить, почему мы всегда говорим, что объединение в список намного лучше?
Потому что вы не всегда знаете, какие строки вы собираетесь объединить. Использование '+' или использование 'sum()' для многих строк, которые вы не знаете заранее, в конечном итоге приводит к квадратичному времени выполнения, в отличие от оптимизированного '.join'. – jamylak
Это будет изменяться в случае использования. Но в целом, да. См. Http://www.skymind.com/~ocrow/python_string/ – Shane
Обратите внимание, что 'b = 'a' + 'b' + 'c'' использует постоянную фальцовку, поскольку все три операнда известны во время компиляции , Попробуйте что-то вроде 'b = a1 + a2 + a3', и вы увидите более сложный байт-код. – chepner