Python中的字符串添加真的比使用join慢吗?
这个问题是指和 我想演示一下,使用Python中的字符串添加真的比使用join慢吗?,python,string,performance,Python,String,Performance,这个问题是指和 我想演示一下,使用+表示字符串比使用''要慢。join(…)。但不知怎的,我失败了: %%timeit result = "" for i in range(3000000): result = result + 100 * str(i) 3.28 s ± 46.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) 及 我使用的是Python3.6,我的假设是最近的版本优化了字符串添加。对此有何评论?问题是你的
+
表示字符串比使用''要慢。join(…)
。但不知怎的,我失败了:
%%timeit
result = ""
for i in range(3000000):
result = result + 100 * str(i)
3.28 s ± 46.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
及
我使用的是
Python3.6
,我的假设是最近的版本优化了字符串添加。对此有何评论?问题是你的比较不公平。特别是在第二个代码片段中,您犯了一个错误,即同时对要连接的字符串的创建进行计时。附加可能在那里占主导地位
首先,我们创建要连接的元素
strings = []
for i in range(3000000):
strings.append(100 * str(i))
定时串串联
%%timeit
result = ''
for i in strings:
result = result + i
1.65 s ± 23.3 ms per loop
现在计时join方法
%timeit result = ''.join(strings)
571 ms ± 10.3 ms per loop
因此,join比concatenating快的说法是正确的 我明白了。我的结论是,使用
append
+join
可能比+
慢,我比较的代码片段是非常现实的用例。这意味着我不能总是喜欢join
而不是+
。这是不一样的。正如我所说的,你也在做一个附加,这是非常昂贵的,因为它必须时不时地创建一个更大的列表(分配内存),然后复制旧的列表。在第一个片段中,您创建了苍蝇的每个元素。因此,你最终选择了两件不同的事情。没有说那是一样的。但我有一些实际的用例,其中人们介绍aslist
并使用append
和join
,因为他们被告知这样更快。因此,如果你已经有了一个字符串列表,那么你只能从join
中获益。当然,人们使用什么是另一个问题。但是问题和陈述是关于连接和连接的操作。我很困惑。您想对连接进行基准测试,对吗?为什么你还要计算输入生成的时间?
%timeit result = ''.join(strings)
571 ms ± 10.3 ms per loop