gpt4 book ai didi

python - 在 Python2 和 Python 3 中使用 "+="与 "extend"进行列表串联

转载 作者:行者123 更新时间:2023-11-28 18:32:54 26 4
gpt4 key购买 nike

我正在对 list 连接进行一些分析,使用两种不同的方法来处理不同长度的列表,使用不同的 Python 版本。

Python 2 中使用 +=:

$ python -m timeit -s "li1=range(10**4); li2=range(10**4)" "li1 += li2"  
10000 loops, best of 3: 55.3 usec per loop
$ python -m timeit -s "li1=range(10**6); li2=range(10**6)" "li1 += li2"
100 loops, best of 3: 9.81 msec per loop

Python 3 中使用 +=:

$ python3 -m timeit -s "li1=list(range(10**4)); li2=list(range(10**4))" "`li1 += li2`"  
10000 loops, best of 3: 60 usec per loop
$ python3 -m timeit -s "li1=list(range(10**6)); li2=list(range(10**6))" "`li1 += li2`"
100 loops, best of 3: 11 msec per loop

Python 2 中使用 extend:

$ python -m timeit -s "li1=range(10**4); li2=range(10**4)" "li1.extend(li2)"  
10000 loops, best of 3: 59 usec per loop
$ python -m timeit -s "li1=range(10**6); li2=range(10**6)" "li1.extend(li2)"
100 loops, best of 3: 10.3 msec per loop

Python 3 中使用 extend:

$ python3 -m timeit -s "li1=list(range(10**4)); li2=list(range(10**4))" "li1.extend(li2)"  
10000 loops, best of 3: 64.1 usec per loop
$ python3 -m timeit -s "li1=list(range(10**6)); li2=list(range(10**6))" "li1.extend(li2)"
100 loops, best of 3: 11.3 msec per loop
  1. 我惊讶地发现 Python 3 比 Python 2 慢得多,而且跳跃幅度很大。
  2. 另一件非常有趣的事情是 +=extend 快得多。

是否有任何实现原因可以证明上述观察结果的合理性,尤其是在 Python 2 和 Python 3 之间?

最佳答案

I'm surprised to notice that Python 3 is much slower than Python 2, and the jump is huge.

正如其他人指出的那样,您的基准测试不支持您关于 Python 3 慢得多的说法。 9.81 毫秒对 11 毫秒,10.3 毫秒对 11.3 毫秒?

Python 3 比 Python 2 慢一点是有据可查的事实。 What's new document性能状态:

The net result of the 3.0 generalizations is that Python 3.0 runs the pystone benchmark around 10% slower than Python 2.5. Most likely the biggest cause is the removal of special-casing for small integers. There’s room for improvement, but it will happen after 3.0 is released!


Another quite interesting thing is doing += is much more faster than doing an extend.

再一次,“更快[更多]”被夸大了。 9.81 毫秒与 10.3 毫秒?

答案参见this related SO question . extend 需要 Python 级别的函数调用,而 += 可以在 C 级别进行优化,因此速度稍快。

关于python - 在 Python2 和 Python 3 中使用 "+="与 "extend"进行列表串联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35248762/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com