python-字串的join要比+操作效率高
阿新 • • 發佈:2019-02-08
程式碼
#-*- coding: utf-8 -*-
from time import time
def plus_test():
t = time()
s = ''
for i in xrange(1000000):
s += 'test'
print(time() - t)
def join_test():
t = time()
li = []
for i in xrange(1000000):
li.append('test')
s = ''.join(li)
print(time() - t)
plus_test()
join_test()
資料
函式 | 執行時間 |
---|---|
plus_test() | 1.06100010872 |
join_test() | 0.110999822617 |
原因
字串物件是不可改變的,也就是說在python建立一個字串後,你不能把這個字元中的某一部分改變。任何上面的函式改變了字串後,都會返回一個新的字串,原字串並沒有變。
所以上面的例子中,任何對字串的操作包括’+’操作符都將建立一個新的字串物件,而不是改變原來的物件.因此N個字串相加必將丟棄中間N-1個結果,而列表不同,列表是可以改變的,因此前面使用list的append,再使用join還原成字串,只內建了一次,節省了很多資源和時間。
字串不可改變的現象其實這也是有變通的辦法的,可以用S=list(S)這個函式把S變為由單個字元為成員的list,這樣的話就可以使用S[3]=’a’的方式改變值,然後再使用S=” “.join(S)還原成字串。