如果需要合并的字符串是在一个序列或者 iterable 中,那么最快的方式就是使用 join() 方法。比如: parts = ['Is', 'Chicago', 'Not', 'Chicago?']
print(' '.join(parts)) print(','.join(parts)) Is Chicago Not Chicago? Is,Chicago,Not,Chicago?
如果只是合并少数几个字符串,使用加号(+)通常已经足够了: a = 'Is Chicago' b = 'Not Chicago?' print(a + ' ' + b) Is Chicago Not Chicago? 讨论
字符串合并貌似很简单,看上去并不需要用一整节来讨论。 但是不应该小看这个问题,程序员通常在字符串格式化的时候因为选择不当而给应用程序带来严重性能损失。
特别需要注意的是,使用加号(+)操作符去连接大量的字符串是非常低效率的, 因为加号连接会引起内存复制以及垃圾回收操作。 特别的,永远都不应像下面这样写字符串连接代码: s = '' for p in parts: s += p
print(s) IsChicagoNotChicago?
这种写法比使用 join() 方法的运行速度要慢很多,因为每一次执行+=操作,都会创建一个新的字符串对象。 最好是先收集所有的字符串片段然后再将它们连接起来。
一个相对比较聪明的技巧是利用生成器表达式转换数据为字符串的同时,合并字符串,比如: data = ['ACME', 50, 91.1] print(','.join(str(d) for d in data)) ACME,50,91.1
同样还得注意不必要的字符串连接操作。有时候容易在没有必要做连接操作的时候仍然多此一举。比如在打印的时候: print(a + ':' + b + ':' + c) # Ugly print(':'.join([a, b, c])) # Still ugly print(a, b, c, sep=':') # Better
如果你想要合并的字符串是在一个序列或者 iterable 中,那么最快的方式就是使用 join() 方法。比如:
>>> parts = ['Is', 'Chicago', 'Not', 'Chicago?']
>>> ' '.join(parts)
'Is Chicago Not Chicago?'
>>> ','.join(parts)
'Is,Chicago,Not,Chicago?'
>>> ''.join(parts)
'IsChicagoNotChicago?'
>>>
初看起来,这种语法看上去会比较怪,但是 join() 被指定为字符串的一个方法。 这样做的部分原因是你想去连接的对象可能来自各种不同的数据序列(比如列表,元组,字典,文件,集合或生成器等), 如果在所有这些对象上都定义一个 join() 方法明显是冗余的。 因此你只需要指定你想要的分割字符串并调用他的 join() 方法去将文本片段组合起来。
如果你仅仅只是合并少数几个字符串,使用加号(+)通常已经足够了:
>>> a = 'Is Chicago'
>>> b = 'Not Chicago?'
>>> a + ' ' + b
'Is Chicago Not Chicago?'
>>>
加号(+)操作符在作为一些复杂字符串格式化的替代方案的时候通常也工作的很好,比如:
>>> print('{} {}'.format(a,b))
Is Chicago Not Chicago?
>>> print(a + ' ' + b)
Is Chicago Not Chicago?
>>>
如果你想在源码中将两个字面字符串合并起来,你只需要简单的将它们放到一起,不需要用加号(+)。比如:
>>> a = 'Hello' 'World'
>>> a
'HelloWorld'
>>>
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。