Самый эффективный способ создать такую коллекцию - использовать массив numpy.
Мы можем построить это с:
import numpy as np
def generate_array(n):
a = np.hstack((np.full(n//2+1, 2), np.zeros(n//2-1)))
a[[0, n//2]] = 1
return a
Например:
>>> generate_array(6)
array([1., 2., 2., 1., 0., 0.])
>>> generate_array(10)
array([1., 2., 2., 2., 2., 1., 0., 0., 0., 0.])
>>> generate_array(16)
array([1., 2., 2., 2., 2., 2., 2., 2., 1., 0., 0., 0., 0., 0., 0., 0.])
Задержка
для n=100_000
, получаем:
>>> timeit(partial(generate_array, 100_000), number=10_000)
1.0764452270013862
для n=1_000_000
, получаем:
>>> timeit(partial(generate_array, 1_000_000), number=1_000)
6.448311180000019
Генерация массива из 100 тыс. Элементов, таким образом, занимает приблизительно (включая небольшие накладные расходы partial
и т. Д.) .