Список срезов с учетом ограничений

#python #arrays #numpy

Вопрос:

У меня есть следующая проблема, связанная с нарезкой массивов.

У меня есть массив формы:

a = [0,1,2,3,4,5,6,7,8,9,10]

и я хотел бы извлечь массив, подобный этому:

b = [8,9,10,0,1,2,3] .

Я попытался использовать обычное объявление типа: b = a[-3:3] но оно возвращает пустой массив, так как оно превышает предел массива.

Я не могу понять, как я могу извлечь этот массив в правильной перестановке.

Комментарии:

1. Является ли ваша система индексации циклической? Я думаю, что для этого вам придется написать функцию.

2. Да, я тоже понял это сейчас. На данный момент я могу работать с ответом, данным NMme, хотя.

3. Извините, я думал, что это пустые массивы, а не списки.

4. Предложите изменить заголовок на «список срезов», а не на «массив срезов».

Ответ №1:

Вы можете просто объединить фрагменты списка, которые вы ищете:

  b = a[-3:]   a[:4]
 

Ответ №2:

В вашем примере вы сохраняете все элементы массива. Для этого существует функция, называемая roll .

 >>> import numpy as np
>>> a = [0,1,2,3,4,5,6,7,8,9,10]
>>> np.roll(a, 3)
array([ 8,  9, 10,  0,  1,  2,  3,  4,  5,  6,  7])
 

Вы также можете использовать отрицательное число для броска в другую сторону:

 >>> np.roll(a, -3)
array([ 3,  4,  5,  6,  7,  8,  9, 10,  0,  1,  2])