样例1、如何将一些小的字符串合并成一个大的字符串
方法1、利用“+”来处理
l = ['a', 'b', 'c', 'd', 'e']
s = ''
for x in l:
s += x
print(s)
“+”的缺点:采用这种方法,如果列表长度很大的话,会占用而外的内存,每一次循环都会得到新的s:
a
ab
abc
abcd
abcde
方法2、采用‘join’方法:
l = ['a', 'b', 'c', 'd', 'e']
''.join(l)
print(l)
>>>'abcde'
join方法连接字符串的时候,会首先计算需要申请的总的内存空间,然后一次性申请所需内存并将字符串中的每一个元素复制到内存中去,所以join的时间复杂度为O(n)
对于大数据量时推荐使用
特殊情况:
如果列表中即存在字符串,又存在数字,此时需要对其进行转化,将数字转换成字符串,可以采用列表解析的方式对列表中的每一个元素进行转换:
l = ['a', 1, 2, 3, 'e']
''.join([str(x) for x in l])
print(l)
上述方法弊端
采用列表解析同样会首先得到一个新的列表,占用额外的内存,可以采用生成器,将列表解析的[] 改成() 即可:
l = ['a', 1, 2, 3, 'e']
''.join(str(x) for x in l)
print(l)
样例2、如何复制一个单词10000遍并形成一个字符串?
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)
"+"符号解析:
字符串对象是不可改变的,也就是说在python创建一个字符串后,你不能把这个字符中的某一部分改变。任何上面的函数改变了字符串后,都会返回一个新的字符串,原字串并没有变。
所以上面的例子中,任何对字符串的操作包括’+’操作符都将创建一个新的字符串对象,而不是改变原来的对象.因此N个字符串相加必将丢弃中间N-1个结果
列表的append方法解析
列表是可以改变的,因此前面使用list的append,再使用join还原成字符串,只内建了一次,节省了很多资源和时间。
样例3、如何改变一个字符串的第n个数的值?
字符串不可改变的现象其实这也是有变通的办法的,可以用S=list(S)这个函数把S变为由单个字符为成员的list,这样的话就可以使用S[3]=’a’的方式改变值,然后再使用S=” “.join(S)还原成字符串。