Вам не нужно использовать NumPy. Вы можете использовать только списки:
>>> foo = [2,3,4]
>>> sum([[i]*foo[i] for i in range(len(foo))], [])
[0, 0, 1, 1, 1, 2, 2, 2, 2]
Это работает так:
Вы можете создавать расширенные массивы, умножая простой массив на константу, поэтому [0] * 2
== [0,0]
. Таким образом, для каждого индекса в массиве мы расширяемся на [i]*foo[i]
. Другими словами:
>>> [[i]*foo[i] for i in range(len(foo))]
[[0, 0], [1, 1, 1], [2, 2, 2, 2]]
Затем мы используем sum
, чтобы свести списки в один список:
>>> sum([[i]*foo[i] for i in range(len(foo))], [])
[0, 0, 1, 1, 1, 2, 2, 2, 2]
Поскольку мы «суммируем» списки, а не целые числа, мы передаем[]
до sum
, чтобы сделать пустой список начальным значением суммы.
(Обратите внимание, что это, скорее всего, будет медленнее, чем numpy, хотя лично я не сравнивал его с чем-то вроде ответа @ Patol75. )