目录
描述
语法
举例
1. 元素序列是列表
2. 元素序列是元组
3. 元素序列是集合
4. 元素序列是字典
5. 元素序列是字符串
注意事项
1. 要连接的字符串序列(参数)必须是字符串
2. 字符串连接符可省略
3. 当可迭代序列是集合时,拼接结果是无序的
4. 当可迭代序列是字典时,拼接结果是键的拼接
join方法和‘+’性能比较
描述
str.join()方法是Python的字符串方法,用于将序列中的元素以指定的字符串连接成一个新的字符串。
语法
string.join(sequence)
举例
1. 元素序列是列表
>>> a = '!@'.join(['Fusion', 'Sphere', 'Cloud'])>>> a'Fusion!@Sphere!@Cloud'
2. 元素序列是元组
>>> " ".join(('China', 'Japan', 'USA', 'UK'))'China Japan USA UK'
3. 元素序列是集合
>>> ''.join({'C', 'h', 'i', 'n', 'a'})'ahCni'
可以看出,输出的字符顺序与集合中元素的顺序不是保持一致的。
4. 元素序列是字典
>>> ' ~ '.join({'Asia':'China', 'Europe':'UK'})'Asia ~ Europe'
可以看出,如果序列是字典,拼接的字符是字典的键。
5. 元素序列是字符串
当元素序列仅仅是字符串时,join函数会将字符串中的每一个单个字符抽取出来,与连接符组合。
>>> ', '.join('happy')'h, a, p, p, y'
注意事项
1. 要连接的字符串序列(参数)必须是字符串
join函数的参数应该是全部由字符串构成的可迭代对象。当可迭代对象不全是由字符串构成的时,Python会报错TypeError。
例如,参数是一个由字符串和整数构成的列表时:
>>> ' * '.join(['1', 2])Traceback (most recent call last):File "<stdin>", line 1, in <module>TypeError: sequence item 1: expected str instance, int found
2. 字符串连接符可省略
字符串连接符可以省略(空字符串)。当字符串连接符为空时,序列中的所有字符串都将连接成一个字符串。
>>> ''.join(['1', '2', '3', '4', '5'])'12345'
3. 当可迭代序列是集合时,拼接结果是无序的
如果可迭代序列参数是集合,join的返回结果不一定是元素在集合中的顺序,而是打乱的:
>>> ' -- '.join({'a', 'b', 'c'})'b -- c -- a'
4. 当可迭代序列是字典时,拼接结果是键的拼接
如果可迭代序列参数是字典,join的返回结果是字典中键的拼接结果,而不是键值对的拼接结果。
可以用values函数来拼接值的结果。
>>> test_dict = {'A':'a', 'B':'b', 'C':'c'}>>> "".join(test_dict)'ABC'>>> "".join(test_dict.values())'abc'
join方法和‘+’性能比较
join()方法和 + 号都可以拼接字符串,但是性能却差异很大。
先来看下面的例子:
下面的例子是将列表str_list中的每个元素分别通过“+”和join方法拼接并重复执行1000次,并比较时间差异。
import timedef spend(func):def wapper(*args, **kwargs):start = time.time()# 为了更好的体验性能差异,重复执行1000遍for i in range(1000):func(*args, **kwargs)end = time.time()spend_time = end - startprint("Spend time: %.6f" % spend_time)returnreturn wapper# 通过+号拼接字符串@ spenddef use_add_opertor(str_list):result = ""for data in str_list:result = result + datareturn# 通过str.join()方法拼接字符串@ spenddef use_join_method(str_list):result = "".join(str_list)returnif __name__ == "__main__":# 为了充分体现性能差异,我们把要拼接的字符串列表多写一点str_list = ["Python", "OpenStack", "data structure", "arithmetic", "Flask", "MySql","concurrence", "PySpider", "HTML", "CSS", "C", "C++"]print("1. Use add operator..")use_add_opertor(str_list)print("-" * 30)print("2. Use str.join() method..")use_join_method(str_list)
运行结果如下:
1. Use add operator..Spend time: 0.001079------------------------------2. Use str.join() method..Spend time: 0.000360
可以看出,在我这台机器上,使用+号拼接字符串比使用str.join()方法拼接字符串消耗时常多了将近2倍。
那么为什么使用join()方法时间会更快一些呢?
因为在Python中字符串是不可变对象,修改字符串就得将原字符串中的值复制,开辟一块新的内存,加上修改的内容后写入到新内存中,以达到“修改”字符串的效果。在使用“+”拼接字符串时,正是使用了重复性的复制、申请新内存、写入值到新内存的工作一遍遍的将字符串的值修改。而使用join()方法拼接字符串时,会先计算总共需要申请多少内存,然后一次性申请所需内存并将字符串复制过去。这样便省去了重复性的内存申请和写入,节省了时间消耗。
如果觉得《Python str join方法:拼接字符串》对你有帮助,请点赞、收藏,并留下你的观点哦!