python: записать в список с заданным шагом одно значение

требуется в список arr записать значение value с позиции start с шагом step

подскажите, как это можно сделать максимально производительно

я использую такой способ:

arr[start::step] = [value] * (len(arr) - start - 1)

но есть ли более производительный способ?


Ответы (1 шт):

Автор решения: CrazyElf

Для массивов достаточно большого размера Numpy вроде неплохо ускоряет.

Простой Python:

arr = list(range(10000))

start = 10
step = 5
value = 42

%timeit arr[start::step] = [value] * ((len(arr) - start - 1 + step)//step)

# 16.6 µs ± 1.08 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

Для Numpy размножать значение не нужно:

import numpy as np

arr = np.arange(10000)

start = 10
step = 5
value = 42

%timeit arr[start::step] = value

# 2.87 µs ± 580 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
→ Ссылка