如何重复列表和操作不同?

时间:2016-05-22 19:40:20

标签: python arrays list

我正在做一个问题,比如word ladder。    最初我有一个字符串列表:paths = [[A]]。    现在B,C和D都是只有一个不同字母的字符串    到A.我希望做的是

[[A]] with [B,C,D] ->  paths = [[A,B], [A,C], [A,D]]

但如果我复制[[A]]三个驯服以准备paths = [[A], [A], [A]]    使用paths = [paths[0]]*3,然后执行:

i=0
for word in [B,C,D]:
    newpath = paths[i]
    paths.append(newpath.append(word))
    i += 1

显示[[A, B, C, D], [A, B, C, D], [A, B, C, D]]。每个副本上的操作似乎相同。即使我使用paths = [paths[0] for i in range(3)],它仍然是相同的。我怎么能避免呢?我的代码出了什么问题?

非常感谢!

1 个答案:

答案 0 :(得分:1)

paths = [paths[0] for i in range(3)]中,paths[0]仍然是对同一个列表的引用。您可能需要paths = [paths[0].copy() for i in range(3)]

您可以将以下代码添加到pythontutor visualization以检查其工作原理:

paths = [['A']]
paths = [paths[0] for i in range(3)]
otherpaths = [['A']]
otherpaths = [otherpaths[0].copy() for i in range(3)]