1. 程式人生 > >python 中的字串連線

python 中的字串連線

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