我知道''.join(list)
是连接字符串的首选方法,而不是说:
for x in list:
s += x
我的问题是为什么这要快得多?
另外,如果我需要连接尚未列在列表中的项目,该怎么办?将它们放在列表中仅仅是为了执行''.join(list)
吗?
编辑:这与以前关联的问题不同,因为我特别想知道这些项目是否已经在列表中,是否仍然建议出于性能原因将它们放入在列表中仅用于加入。
答案 0 :(得分:3)
这更快,因为join
方法可以在表面下潜水#34;并使用Python层中没有的低级优化。循环必须通过序列生成器并依次处理每个对象。此外,您的循环必须在每次迭代时构建一个新字符串,这是一个缓慢的过程。 join
可以在 C 图层或下面使用可变字符串。
如果对象已经不在列表中......则取决于应用程序。但是,我怀疑几乎所有这样的应用程序都必须通过循环开发某处才能形成列表,因此您将失去join
的一些优势。虽然可变字符串仍然可以节省时间。
答案 1 :(得分:0)
是的,join
速度更快,因为它不需要继续构建新字符串。
但是你不需要列表来使用加入!您可以给它任何可迭代的内容,例如generator expression:
''.join(x for x in lst if x != 'toss')
虽然使用join
时似乎优化了list
。所有这些都是等价的,但具有列表理解的那个是最快的。
>>> timeit("s=''.join('x' for i in range(200) if i!=47)")
15.870241802178043
>>> timeit("s=''.join(['x' for i in range(200) if i!=47])")
11.294011708363996
>>> timeit("s=''\nfor i in range(200):\n if i!=47:\n s+='x'")
16.86279364279278