Циклический сдвиг списка на N элементов вправо
Мне надо сдвинуть список на N элементов вправо.
Для этого я сначала перемещаю элементы из конца в начало (первый цикл for), а потом сортирую другую половину списка (второй цикл for). Не могу понять, почему сортировка не происходит.
Входные данные:
6 // кол-во элементов массива
1 2 3 4 5 6 // элементы массива
2 // кол-во элементов на которое надо сдвинуть
Выходные данные:
5 6 1 2 3 4 5
Мой код:
n = int(input())
a = input().split()
x = int(input())
for i in range(x):
temp = a[i]
a[i] = a[n - x + i]
a[n - x + i] = temp
for i in range(x, n - 1):
for j in range(x, n - i - 1):
if a[j] > a[j + 1]:
temp = a[j]
a[j] = a[j + 1]
a[j + 1] = temp
print(*a)
Ответы (2 шт):
Проблема в это строке:
a = input().split()
Когда вы вводите 1 2 3 4 5 6, переменная а будет иметь значение ['1', '2', '3', '4', '5', '6'].
Так как это строка. Чтобы это исправить воспользуйтесь функцией map:
a = list(map(int, input().split()))
Эта функция применит операцию int к каждому элементу списка input().split(). А функция list преобразует результат в список.
Решение с помощью слайсов.
length = int(input())
lst = list(map(int, input().split()))
shift = int(input())
lst = lst[-shift:] + lst[:-shift]
print(lst)
Input
10
1 2 3 4 5 6 7 8 9 10
4
Output
[7, 8, 9, 10, 1, 2, 3, 4, 5, 6]