Cycling values of a list

  • A+

I'm new to coding and am trying to write a simple code that will take a list, say [1,2,3] and cycle the elements n number of times. So if n=1, I should get A=[3,1,2]. If n=2, I should get A=[2,3,1].The code I have written is:

n=1 j=0 A = [1,2,3] B = [None]*len(A)  while j<=n:      for i in range(0,len(A)):          B[i] = A[-1+i]      j=j+1 print(B) 

The problem is that no matter what the value of n is I get the same answer which is only cycled once. I think the problem is that the loop is cycling through the same B every time, so I need to store the new B as something else and then repeat the loop with new B. But I can't figure out how to do that. Any tips would be appreciated


I think you're overcomplicating it. Consider changing it to something like the following:

n = 1 A = [1,2,3] B = A.copy()  for _ in range(n):     # Cycle through by concatenating the last element and all other elements together      B = [B[-1]]+B[0:-1]  print(B) 

In case of n=1, you get [3, 1, 2], and n=2 gives you [2, 3, 1]

Note that what you are trying to do is implemented in numpy.roll (I suppose you're asking about the process, not the result, but just in case)

import numpy as np  >>> np.roll(A,1) array([3, 1, 2]) >>> np.roll(A,2) array([2, 3, 1]) 


:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: