擴展python中數組前端的最快方法是什麼?可以說我有兩個數組: a和b。我想讓a = b + a(b不應該改變)的最快方式。快速擴展Python前端列表
我的小benchamarks:
試驗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.5秒〜
test3:
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.4秒
但我認爲它應該會更快,因爲列表串聯應當進行儘可能少的根本指針的變化。 而下面的代碼是最快的國家之一,但改變了B,不是(這樣不利於我們的宗旨): 測試「錯誤」:
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
所以理論上應該有一種方法來延長測試「錯誤」的時間。
'從集合IM port deque' – eumiro
請注意,你有什麼是列表,而不是數組。 –