Перейти к содержимому

Как сдвинуть элементы массива на 1 вправо python

  • автор:

Циклический сдвиг

Выполнить циклический сдвиг в списке целых чисел на указанное число шагов. Сдвиг также должен быть кольцевым, то есть элемент, вышедший за пределы списка, должен появляться с другого его конца.

Решение задачи на языке программирования Python

Для решения этой задачи можно воспользоваться следующими методами списка:

  • append — добавляет элемент в конец списка,
  • insert — вставляет элемент по указанному индексу,
  • pop — извлекает элемент с конца списка или, если был передан индекс, по индексу.

Пусть наша функция shift в качестве аргументов принимает список и количество шагов сдвига. Если шаги представлены положительным числом, то сдвиг выполняется вправо, то есть надо извлечь последний элемент и добавить его в начало.

Если шаги — отрицательное число, то будем выполнять сдвиг справа налево, то есть надо извлечь первый элемент и добавить его в конец.

def shift(lst, steps): if steps  0: steps = abs(steps) for i in range(steps): lst.append(lst.pop(0)) else: for i in range(steps): lst.insert(0, lst.pop()) nums = [4, 5, 6, 7, 8, 9, 0] print(nums) shift(nums, -2) print(nums) shift(nums, 3) print(nums)
[4, 5, 6, 7, 8, 9, 0] [6, 7, 8, 9, 0, 4, 5] [0, 4, 5, 6, 7, 8, 9]

Как сдвинуть элементы в массиве NumPy (с примерами)

Вы можете использовать один из следующих методов для смещения элементов в массиве NumPy:

Метод 1: сдвинуть элементы (сохранить все исходные элементы)

#shift each element two positions to the right data_new = np.roll (data, 2) 

Способ 2: элементы сдвига (разрешить замену элементов)

#define shifting function def shift_elements (arr, num, fill_value): result = np.empty_like (arr) if num > 0: result[:num] = fill_value result[num:] = arr[:-num] elif num < 0: result[num:] = fill_value result[:num] = arr[-num:] else : result[:] = arr return result #shift each element two positions to the right (replace shifted elements with zero) data_new = shift_elements(data, 2, 0) 

В следующих примерах показано, как использовать каждый метод на практике.

Метод 1: сдвинуть элементы (сохранить все исходные элементы)

В следующем коде показано, как использовать функцию np.roll() для сдвига каждого элемента в массиве NumPy на две позиции вправо:

import numpy as np #create NumPy array data = np.array([1, 2, 3, 4, 5, 6]) #shift each element two positions to the right data_new = np.roll (data, 2) #view new NumPy array data_new array([5, 6, 1, 2, 3, 4]) 

Обратите внимание, что каждый элемент был сдвинут на две позиции вправо, а элементы в конце массива просто переместились вперед.

Мы также могли бы использовать отрицательное число в функции np.roll() для сдвига элементов влево:

import numpy as np #create NumPy array data = np.array([1, 2, 3, 4, 5, 6]) #shift each element three positions to the left data_new = np.roll (data, -3) #view new NumPy array data_new array([4, 5, 6, 1, 2, 3]) 

Способ 2: элементы сдвига (разрешить замену элементов)

Мы также можем определить пользовательскую функцию для сдвига элементов в массиве NumPy и разрешить замену сдвинутых элементов на определенное значение.

Например, мы можем определить следующую функцию для сдвига элементов и замены любых сдвинутых элементов значением 0:

import numpy as np #create NumPy array data = np.array([1, 2, 3, 4, 5, 6]) #define custom function to shift elements def shift_elements (arr, num, fill_value): result = np.empty_like (arr) if num > 0: result[:num] = fill_value result[num:] = arr[:-num] elif num < 0: result[num:] = fill_value result[:num] = arr[-num:] else : result[:] = arr return result #shift each element two positions to the right and replace shifted values with zero data_new = shift_elements(data, 2, 0) #view new NumPy array data_new array([0, 0, 1, 2, 3, 4]) 

Мы также можем использовать отрицательное число в функции, чтобы сдвинуть элементы влево:

import numpy as np #create NumPy array data = np.array([1, 2, 3, 4, 5, 6]) #define custom function to shift elements def shift_elements (arr, num, fill_value): result = np.empty_like (arr) if num > 0: result[:num] = fill_value result[num:] = arr[:-num] elif num < 0: result[num:] = fill_value result[:num] = arr[-num:] else : result[:] = arr return result #shift each element three positions to the left and replace shifted values with 50 data_new = shift_elements(data, -3, 50) #view new NumPy array data_new array([ 4, 5, 6, 50, 50, 50]) 

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в NumPy:

Как сдвинуть элементы массива на 1 вправо python

Скачай курс
в приложении

Перейти в приложение
Открыть мобильную версию сайта

© 2013 — 2023. Stepik

Наши условия использования и конфиденциальности

Get it on Google Play

Public user contributions licensed under cc-wiki license with attribution required

Python-сообщество

[RSS Feed]

  • Начало
  • » Центр помощи
  • » Циклический сдвиг массива

#1 Ноя. 16, 2016 22:41:58

valoroso Зарегистрирован: 2016-11-14 Сообщения: 14 Репутация: 0 Профиль Отправить e-mail

Циклический сдвиг массива

Добрый вечер. Решаю задачу на сайте

Напишите эффективную программу, которая будет циклически сдвигать заданный массив на k элементов вправо. Дополнительные массивы и рекурсию не использовать.

Входные данные
На вход программе сначала подаются значения n100 — количество элементов в массиве и k100. В следующей строке входных данных расположены сами элементы массива — целые числа, по модулю не превосходящие 30 000.

Выходные данные
Выдайте значения элементов массива после выполнения указанной операции.

Примеры
входные данные
5 3
5 4 3 2 1
выходные данные
3 2 1 5 4

Перепробовал, много разных кодов:

n, m = input().split() n = int(n) k = int(m) array = input().split() for i in range(len(array)): array[i] = int(array[i]) k=k%len(array) print(array[-k:] + array[:-k]) 

и с pop/ append

n, m = input().split() n = int(n) m = int(m) arr = input().split() for i in range(len(arr)): arr[i] = int(arr[i]) z = 0 while z  m-1: x = arr.pop(0) print(x) arr.append(x) z+= 1 print(arr) 

и даже такой

n, m = input().split()
n = int(n)
k = int(m)
array = input().split()
for i in range(len(array)):
array[i] = int(array[i])
k=k%len(array)
if k==len(array) or k == 0:
print(array)
else:
c = n - k
while c < n:
array.append(array[c])
c+=1

c = n - k
while c>=0:
array[c+k]=array[c]
c-=1

c = n - k
i = k - 1
while c < n:
array[i] = array.pop()
c+=1
i-=1

print(array)

Пишет - неправильный формат вывода.
В чем проблема? Кроме того, что неправильный формат) Где ошибка в коде. Или может я не так понял задание?

Отредактировано valoroso (Ноя. 16, 2016 22:43:02)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *