在python中扩展数组前面的最快方法是什么?假设我有 2 个数组:a 和 b。我想以最快的方式 a = b+a (b 不应该改变)。
我的小基准:
测试1:
a,b = [],[]
for i in range(0,100000):
a.append(i)
b.append(i)
def f(a,b):
for i in range(0,100):
a=a+b
import cProfile
cProfile.run('f(a,b)')
时间:~12 秒
测试2:
a,b = [],[]
for i in range(0,100000):
a.append(i)
b.append(i)
def f(a,b):
for i in range(0,100):
a[0:0] = b
import cProfile
cProfile.run('f(a,b)')
时间:~1.5s
测试3:
a,b = [],[]
for i in range(0,100000):
a.append(i)
b.append(i)
lenb = len(b)
def f(a,b):
for i in range(0,100):
b.extend(a)
# do something with b
b = b[:lenb]
import cProfile
cProfile.run('f(a,b)')
时间:~0.4s
但我认为它应该更快,因为列表连接应该作为少数基础指针的更改。下面的代码是最快的,但改变的是 b,而不是 a(所以它不适合我们的目的):测试“错误”:
a,b = [],[]
for i in range(0,100000):
a.append(i)
b.append(i)
def f(a,b):
for i in range(0,100):
b.extend(a)
import cProfile
cProfile.run('f(a,b)')
时间:~0.13s
所以理论上应该有一种方法可以在测试“错误”的时候延长前面的时间。