我试图在python3中左旋转一个数组。我使用的代码是:
def rotLeft(a, d):
b = a
lengthOfArray = len(a)
shift = d
for i in range (0,lengthOfArray):
print(a)
newLocation = (i + (lengthOfArray - shift)) % lengthOfArray
b[newLocation] = a[i]
return b
if __name__ == '__main__':
nd = input().split()
n = int(nd[0])
d = int(nd[1])
a = list(map(int, input().rstrip().split()))
result = rotLeft(a, d)
print(result)
它接受来自用户的三个输入,即元素数组的长度、要执行的旋转次数和数组本身。但是,数组中的第一个元素不是旋转的,而是填充在同一位置的第一个元素。例如:
输入:
5 4
12 76 1 09 13
输出:
[12, 12, 12, 12, 12]
我的算法出了什么问题,我该如何解决?你知道吗
rotate方法的第一行有错误:
像
b = a
这样的简单赋值不会像人们期望的那样创建列表的真实副本。相反,这两个变量只是指向内存中的同一个列表。因此,如果您在a
中更改某些内容,这些更改也将反映在b
中,反之亦然。你知道吗要创建该数组的新副本,请使用:
有关复制数组的更多可能性,请查看:How to clone or copy a list?
您的算法非常好,唯一的问题是
b=a
使b也指向a,但是您想要的是取a的copy
,通过执行列表切片b = a[:]
来实现,然后代码工作得非常好。你知道吗输出将是
使用复制模块有效地复制列表,而无需在内存中共享相同的地址。
然后再试试
而不是
有关这两个不同的原因的详细信息,请参见https://docs.python.org/2/library/copy.html。你知道吗
另外,可以考虑使用列表理解:
相关问题 更多 >
编程相关推荐