Каков самый быстрый способ расширить переднюю часть массива в python? Допустим, у меня есть 2 массива: а и б. Я хочу сделать самый быстрый способ 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,5 с
тест 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,4 с
Но я думаю, что это должно быть быстрее, потому что конкатенация списков должна выполняться как изменение нескольких базовых указателей. И следующий код является самым быстрым, но он меняет 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,13 с
Таким образом, теоретически должен быть способ увеличить время перед тестом "НЕПРАВИЛЬНО".