在Python中连接字符串的首选方法是什么?

问题:

由于Python的string不能更改,我想知道如何更有效地连接字符串?
我可以这样写:

s += stringfromelsewhere

或者这样:

s = []
s.append(somestring)

later

s = ''.join(s)

在写这个问题的同时,我发现一篇很好的文章谈论这个话题。
 http://www.skymind.com/~ocrow/python_string/
但是在Python 2.x中,所以问题在Python 3中会发生什么变化?

回答:

将字符串附加到字符串变量的best方式是使用++=。这是因为它的可读性和快速性。他们也是一样快,你选择的是一个味道的问题,后一个是最常见的。以下是timeit模块的时间:

a = a + b:
0.11338996887207031
a += b:
0.11040496826171875

但是,那些推荐列出并附加到列表中,然后加入这些列表的用户,这样做是因为将字符串附加到列表可能比扩展字符串非常快。这在某些情况下也是如此。例如,这是一个
百万个附加的一个字符的字符串,首先是一个字符串,然后到一个列表:

a += b:
0.10780501365661621
a.append(b):
0.1123361587524414

好的,结果是,即使生成的字符串是一百万个字符长,附加的速度更快。
现在我们来尝试一个千字符长的字符串十万次:

a += b:
0.41823482513427734
a.append(b):
0.010656118392944336

因此,结束字符串长约100MB。这是相当缓慢,附加到列表是更快。那个时间不包括最终的a.join()。那么需要多长时间?

a.join(a):
0.43739795684814453

Oups。即使在这种情况下,附加/加入也较慢。
那么这个建议来自哪里? Python 2?

a += b:
0.165287017822
a.append(b):
0.0132720470428
a.join(a):
0.114929914474

那么,如果你使用非常长的字符串(通常不是,你会有一个100MB内存的字符串),那么append / join的速度会比marginally快吗?
但是真正的挑战是Python 2.3。在哪里我甚至不会告诉你时间,因为它是如此之慢,它还没有完成。这些测试突然出现minutes。除了附加/加入,这跟随后来的Pythons一样快。
对。 Python在Python时代的连接速度非常慢。但是,2.4它已经不再是(或至少Python 2.4.7),所以在2008年,当Python 2.3停止更新时,使用append / join的建议已经过时了,你应该已经停止使用它了。 🙂
 (Update: Turns out when I did the testing more carefully that using + and += is faster for two strings on Python 2.3 as well. The recommendation to use ''.join() must be a misunderstanding)
但是,这是CPython。其他实现可能还有其他问题。这只是过早优化是所有邪恶根源的另一个原因。不要使用被认为“更快”的技术,除非你先测量它。
 因此,“最佳”版本的字符串连接是使用+或+ =。如果这样做对你来说很慢,这是不太可能的,然后再做别的事情。
那么为什么要在我的代码中使用很多附加/加入呢?因为有时它更清楚。特别是当您连接在一起时,应该用空格或逗号或换行符分隔。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Which is the preferred way to concatenate a string in Python?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

+ 21 = 22