有人能看出我的代码有什么问题吗(ARRAY 旋转)?
Can someone see what's wrong with my code (ARRAY rotations)?
我确定错误出在旋转函数中,但我找不到它是什么。
代码在 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)
编辑:我只想知道现有代码有什么问题。请不要给出替代方案。
好吧,这里有一个问题:
arr = b
您在此处分配给局部变量。那将没有效果。
将其替换为 return b
并像这样使用:
print('array after rotation: ', rotate(a,n))
可能还有更多问题,但这是首先映入眼帘的。
def rotate(arr, n):
return arr[n:] + arr[:n]
要从 a = [1, 3, 4, 5, 5, 7, 8, 9]
、
得到 [9, 1, 3, 4, 5, 5, 7, 8]
你需要做 rotate(a, len(a) - 1)
.
行:
def rotate(arr, n):
# ...
<b>arr = b</b>
作用不大。 arr
是局部变量,因此将其设置为不同的值对调用它的变量没有影响。 Python 不执行 call-by-reference,它执行 call-by-value。如果对象是可变的,您可以更改该对象的状态,但不能更改指向该对象的变量的引用(或者至少不能不使用一些技巧)。
解决这个问题最优雅的方法可能是 return 新对象,并在调用者级别设置它:
def rotate(arr, n):
return arr[n:] + arr[:n]
并像这样拨打电话:
arr = rotate(arr, len(n)-1)
我确定错误出在旋转函数中,但我找不到它是什么。 代码在 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)
编辑:我只想知道现有代码有什么问题。请不要给出替代方案。
好吧,这里有一个问题:
arr = b
您在此处分配给局部变量。那将没有效果。
将其替换为 return b
并像这样使用:
print('array after rotation: ', rotate(a,n))
可能还有更多问题,但这是首先映入眼帘的。
def rotate(arr, n):
return arr[n:] + arr[:n]
要从 a = [1, 3, 4, 5, 5, 7, 8, 9]
、
[9, 1, 3, 4, 5, 5, 7, 8]
你需要做 rotate(a, len(a) - 1)
.
行:
def rotate(arr, n):
# ...
<b>arr = b</b>
作用不大。 arr
是局部变量,因此将其设置为不同的值对调用它的变量没有影响。 Python 不执行 call-by-reference,它执行 call-by-value。如果对象是可变的,您可以更改该对象的状态,但不能更改指向该对象的变量的引用(或者至少不能不使用一些技巧)。
解决这个问题最优雅的方法可能是 return 新对象,并在调用者级别设置它:
def rotate(arr, n):
return arr[n:] + arr[:n]
并像这样拨打电话:
arr = rotate(arr, len(n)-1)