Python中的循环旋转

时间:2019-02-23 16:35:14

标签: python

任务:

  

给出了一个由A整数组成的数组N。旋转数组意味着将每个元素右移一个索引,并将数组的最后一个元素移到第一位。例如,数组A = [3, 8, 9, 7, 6]的旋转为[6, 3, 8, 9, 7](元素右移一个索引,而6移到第一位)。
  目标是旋转数组A K次;也就是说,A的每个元素将向右移动K次。

我想知道为什么这个解决方案不起作用?

def solution(A , K):
     old = A
     new = [0]*len(A)

     for i in range(K):
         new[0]=old[-1]
         new[1:] = old[:-1]
         old = new
     return new

注意:我已经解决了任务,但是我只是不明白为什么它不起作用。

1 个答案:

答案 0 :(得分:1)

问题在于,执行new时,您只是在old = new列表中分配了一个新的变量名。因此,您现在对new所做的任何更改也将反映在old中,因为您仅创建了指向new列表相同存储位置的新指针。您应该创建列表的副本,以便不修改原始列表。一种这样做的方法是old = new.copy()

def solution(A , K):
     old = A
     new = [0]*len(A)
     for i in range(K):
         new[0]=old[-1]
         new[1:] = old[:-1]
         old = new.copy() # This was the problematic line
     return new

solution([1,2,3,4,5], 2)
# [4, 5, 1, 2, 3]

solution([1,2,3,4,5], 3)
# [3, 4, 5, 1, 2]