字符串处理在大多数编程程序语言中都不可避免。字符串的连接也是在编程过程中经常需要面对的问题。Python中的字符串与其他一些程序语言C++、Java有一些不同,它为不可变对象,一旦创建便不能改变。它的这个特性直接影响到Python中字符串连接的效率。
在python中字符串连接主要有以下两种方法:
1、使用操作符“+”连接字符串
2、使用join连接字符串
使用join方法和使用“+”操作符来连接字符串,join()方法的效率要高于“+”操作符,特别是字符串规模较大的时候,join()方法的优势更为明显。造成这种耗时差异的原因,主要是因为:
1、当使用操作符”+”连接字符串的时候,由于字符串是不可变对象,其工作原理实际上是这样的,如果要连接如下字符串:S1+S2+S3+……+SN,执行一次“+”操作便会在内存中申请一块新的内存空间,并将上一次操作的结果和本次操作的右操作数复制到新申请的内存空间,即当执行S1+S2的时候会申请一块内存,并将S1、S2复制到该内存中,依次类推。因此,在N个字符串连接的过程中,会产生N-1个中间结果,每产生一个中间结果都需要申请和复制依次内存,总共需要申请N-1次内存,从而严重影响了执行效率,N越大,对内存的申请和复制的次数越多,“+”操作符的效率就越低。因此,整个字符连接的过程中,相关于S1被复制N-1次,S2被复制了N-2次……,SN被复制了1次(并不完全等于S1复制N-1次,因为后续复制都是对中间结果的复制),所以字符串的连接时间约为s*n^2,其中s为复制一次字符串的平均时间。
2、当用join()方法连接字符串的时候,会首先计算需要的总的内存空间,然后一次性申请所需内存并将字符序列的每一个元素放到内存空间中去,所以join操作的时间约为s*n,其中s为复制一次字符串的平均时间。
因此,字符串连接,特别是大规模字符串的处理,应该尽量有限使用join(),而不是+。