Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的字符串添加真的比使用join慢吗?_Python_String_Performance - Fatal编程技术网

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
而不是
+
。这是不一样的。正如我所说的,你也在做一个附加,这是非常昂贵的,因为它必须时不时地创建一个更大的列表(分配内存),然后复制旧的列表。在第一个片段中,您创建了苍蝇的每个元素。因此,你最终选择了两件不同的事情。没有说那是一样的。但我有一些实际的用例,其中人们介绍as
list
并使用
append
join
,因为他们被告知这样更快。因此,如果你已经有了一个字符串列表,那么你只能从
join
中获益。当然,人们使用什么是另一个问题。但是问题和陈述是关于连接和连接的操作。我很困惑。您想对连接进行基准测试,对吗?为什么你还要计算输入生成的时间?
%timeit result = ''.join(strings)

571 ms ± 10.3 ms per loop