Предположим, у меня есть список
a=[0,1,2,3,4,5,6,7,8,9]
Я случайным образом выбираю индекс, используя
i = np.random.choice(np.arange(a.size))
и теперь я хочу выбрать симметричный интервал вокруг i некоторого размера, скажем 2. Так, например, для данного списка, если выбран индекс i = 5
, я получаю что-то вроде
print(a[i-2:i+2+1])
>> [3, 4, 5, 6, 7]
Это отлично работает
однако, если я окажусь рядом с одной из конечных точек, i = 1
. Используя то, что у меня есть,
print(a[i-2:i+2+1])
>> []
Вместо этого я хочу что-то напечатать асимметричный интервал, например [0, 1, 2, 3]
если я = 8
print(a[i-2:i+2+1])
>> [6, 7, 8, 9]
как будто я тоже этого хочу, так что, похоже, близость к конечной точке не имеет значения. Самое близкое к решению, которое я получил (скажем, для i = 1)
print([a[0:i+3] if a[i-2:i+2+1] == [] else a[i-2:i+2+1] ])
>> [[0, 1, 2, 3]]
Но это возвращается, [[0,1,2,3]]
вместо [0,1,2,3]
Есть ли хороший способ сделать это в python / numpy, используя понимание списка или что-то еще?