有人可以看到我的代码有什么问题(ARRAY旋转)吗?

时间:2019-06-12 21:23:18

标签: python arrays rotation

我确定错误在于旋转功能,但我找不到它。 代码在python3中

def rotate(arr, n):
    x = arr[n - 1]
    b = list()
    b.append(x)
    for i in range(0,len(arr) - 1):
        b.append(arr[i]);

    arr = b

a = [1,3,4,5,5,7,8,9]


print('array before is: ',a)
n=len(a)
rotate(a, n)




print('array after rotation: ',a)

编辑:我只想知道现有代码有什么问题。请不要提供替代解决方案。

3 个答案:

答案 0 :(得分:1)

好吧,这里有一个问题:

  

arr = b

您在此处分配给局部变量。那将无效。 将其替换为return b 并像这样使用:

print('array after rotation: ', rotate(a,n))

可能还有更多问题,但这是第一眼。

答案 1 :(得分:1)

def rotate(arr, n):
    return arr[n:] + arr[:n]

要从[9, 1, 3, 4, 5, 5, 7, 8]获得a = [1, 3, 4, 5, 5, 7, 8, 9]

您需要执行rotate(a, len(a) - 1)

答案 2 :(得分:0)

该行:

def rotate(arr, n):
    # ...
    arr = b

没有做太多。 arr是局部变量,因此将其设置为其他值不会影响调用该变量的变量。 Python不会执行按引用调用,而是会执行按值调用。如果对象是可变的,则可以更改该对象的状态,但是不能更改指向该对象的变量的引用(或者至少没有一些技巧)。

解决此问题的最优雅方法可能是返回新对象,并将其设置在调用者级别:

def rotate(arr, n):
    return arr[n:] + arr[:n]

并拨打以下电话:

arr = rotate(arr, len(n)-1)