python 中的字串連線
阿新 • • 發佈:2019-02-02
python 中可使用 + 進行字串的連線操作
但很多文件裡都說,python 使用 + 進行字串連線的效率低下
這直接導致本人在程式碼中不敢使用 + 進行字串的連線操作
可事實又是怎樣呢?
之所以說python 中使用 + 進行字串連線的操作效率低下,是因為python中字串是不可變的型別,使用 + 連線兩個字串時會生成一個新的字串,生成新的字串就需要重新申請記憶體,當連續相加的字串很多時(a+b+c+d+e+f+...) ,效率低下就是必然的了
對於這種連加操作可以用列表實現:Str = ''.jon(a,b,c,d,e,f,...) 以提高效率,這樣只會有一次記憶體的申請
其實在實際應用中需要使用字串連續相加是很少的,更多的操作是幾個字串的連線,當有這樣的需求時,使用 + 操作符其實是最快的方式
本人同樣也嘗試過使用 tList.append(i),最後再 ''.join(tList),但經實際程式碼對比,還是 + 操作效率更高
下面給出測試程式碼:
執行結果:#!/usr/bin/env python # -*- coding:utf-8 -*- import os,sys import time MAX = 9000000 char_list = [ chr((i % 26) +97) for i in xrange(MAX) ] my_str='' last_time = time.time() for i in char_list: my_str = my_str + i print time.time() - last_time print '-' * 80 my_str='' t_list=[] last_time = time.time() for i in char_list: t_list.append(i) my_str = ''.join(t_list) print time.time() - last_time print '-' * 80
2.13897681236
--------------------------------------------------------------------------------
2.35726714134
--------------------------------------------------------------------------------
下面是一個連加操作時 字串+ 與列表 join的效率對比(程式碼來自:http://www.douban.com/group/topic/12795262/ 的一則回貼):
執行結果:from time import time def lz(): t = time() for i in xrange(10000): s = '蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州' +'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭 州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+ '蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭> 州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州'+'蘭州' print time() - t def v5(): t = time() for i in xrange(10000): s = ''.join(['威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威> 武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武', '威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威> 武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武','威武', '威武','威武','威武','威武','威武','威武','威武','威武','威武']) print time() -t lz() is v5()
0.111644983292
0.0529618263245