'understanding the cyclic rotation codility challenge?

I want to start by saying thank you for the help first.

I am tackling the cyclic rotation problem where you have to shift the contents of an list/array to the right and effectively wrapping the elements around so for example:

For example, given

 A = [3, 8, 9, 7, 6]
 K = 3

the function should return [9, 7, 6, 3, 8]. Three rotations were made:

 [3, 8, 9, 7, 6] -> [6, 3, 8, 9, 7]
 [6, 3, 8, 9, 7] -> [7, 6, 3, 8, 9]
 [7, 6, 3, 8, 9] -> [9, 7, 6, 3, 8] 

my code is as follows:

def solution(A, K):
    new_list = []
    first_index = 0
    for i in range(0, K):
        for num in range(0, len(A) - 1):
            new_list.insert(0, A.pop())
            print('new list {}'.format(new_list))
            print('old list {}'.format(A))
            if len(new_list) == 3:
                new_list.insert(len(new_list), A.pop(first_index))
                print(new_list)

after 3 rotations I get the list as A = [8, 9, 7, 6, 3] so to me it appears to place the last element from A to the front of the new_list.

So any help or points in the right direction would be helpful thank you again.



Solution 1:[1]

So I realised I only had to loop around K times and check for an empty list. And what I got in the end is:

def solution(A, K):
    for i in range(0, K): # will perform K iterations of the below code
        if A == []: # check if list is empty
            return A # return A if A is the empty list
        A.insert(0, A.pop()) # inserts at the first index of A the last element of A
    return A # will return the list A

Solution 2:[2]

You can simply do it with this code.

def solution(A, K):
    K = K % len(A)
    return A[-K:] + A[:-K]

You can check more ways to do this here. Efficient way to rotate a list in python

Solution 3:[3]

Another Solution using deque from the collections module. It has an in-built rotate function.

from collections import deque
def solution(A, K):
    m=deque(A)
    m.rotate(K)
    return list(m)

Solution 4:[4]

def slice(A):
    B = []
    for i  in range(0,len(A)) :
        B.append(A[-1+i])
    return B 

def solution(A, K):
    for i in range (1,K+1):
        A = slice(A)
    return A

Solution 5:[5]

def solution(A,K):        
    for k in np.arange(K):
        B=[]
        for i in range(len(A)):
            B.append(A[i-1])
        A=B
    return B

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 user2152012
Solution 2 Lead Developer
Solution 3 Talha Tayyab
Solution 4 seyyah
Solution 5 DanielWarda