Rotation of the numbers-python
为了找到数字的旋转,我写了一个类似
1 2 3 4 5 6 7 8 9 10 | def rotation(N): A=[] for i in range(len(N)): y=N.pop(0) N.append(y) A.append(N) return A K=[1,9,7] r=rotation(K) print(r) |
但它给了我一个输出,比如:
1 | A=[[1, 9, 7], [1, 9, 7], [1, 9, 7]] |
但应该是
1 | A=[[1,9,7],[9,7,1],[7,1,9]] |
我不明白为什么会这样谢谢
使用一个简单的列表切片:
1 2 3 4 5 6 7 8 9 10 | def rotation(N): output = [] for i in range(len(N)): output.append(N[i:] + N[:i]) return output K=[1,9,7] r=rotation(K) print(r) # [[1, 9, 7], [9, 7, 1], [7, 1, 9]] |
1 2 3 4 | def rotation(N): return [N[i:] + N[:i] for i in range(len(N))] K = [1, 9, 7] print(rotation(K)) |
使用collections.deque
你应该使用这个
这是使用一
1 2 3 4 5 6 7 8 9 10 11 | from collections import deque A = deque([1, 9, 7]) for i in range(len(A)): print(A) A.rotate() deque([1, 9, 7]) deque([7, 1, 9]) deque([9, 7, 1]) |
为什么你的代码不工作
你的代码不工作的原因是因为你是相同的对象,而不是修改的一个副本。做下面的工作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | def rotation(N): A = [] for i in range(len(N)): N = N[:] N.append(N.pop(0)) A.append(N) return A K = [1,9,7] r = rotation(K) print(r) [[9, 7, 1], [7, 1, 9], [1, 9, 7]] |
进一步的解释
如果你想修改相同的对象,
我看到你想要做的。所有在这里是第一,改进:你可以把这个变量"Y",那么这样的:
1 | N.append(N.pop(0)) |
然后,你必须复制列表:
1 | A.append(N[:]) |
整个代码看起来像这样:
1 2 3 4 5 6 | def rotation(N): A=[] for i in range(len(N)): N.append(N.pop(0)) A.append(N[:]) return A |
1,9,7 = [ K ]R(k)=旋转打印(R)
这样做的工作。这是因为知识manages Python列表。这是希望的。