我正在学习Python并且一直试图制作一个双端队列.但是,我输出不正确,我不知道为什么.我的代码如下:
p = [2, 1], [1, 1]
init_q= deque()
init_q.append(p)
for i in range(len(p)):
for j in range(len(p[i])):
temp = p[i][j]
p[i][j] = 0
init_q.append(p)
p[i][j] = temp
while init_q:
print init_q.pop()
Run Code Online (Sandbox Code Playgroud)
在这段代码中,我接受一个列表,然后我想创建一个包含5个列表的队列,其中4个在不同的位置有一个0,我想要的结果是:
([2, 1], [1, 1])
([0, 1], [1, 1])
([2, 0], [1, 1])
([2, 1], [0, 1])
([2, 1], [1, 0])
Run Code Online (Sandbox Code Playgroud)
但是,我得到的结果是:
([2, 1], [1, 1])
([2, 1], [1, 1])
([2, 1], [1, 1])
([2, 1], [1, 1])
([2, 1], [1, 1])
Run Code Online (Sandbox Code Playgroud)
我通过简化代码在 Python Tutor 上创建了可视化。摆弄一下,您就可以轻松地看到发生了什么。
对代码进行一行更改即可解决此问题。
init_q.append(map(list, p)) # Initialize a new list from p's element lists
Run Code Online (Sandbox Code Playgroud)
这是使用上述更改的可视化效果。