我在for循环中遗漏了关于append()的内容。我有两个列表,我想要替换列表中的项目root = ['A','B','C','D']说第一项索引0.另一个列表是replacementments = [1,2, 3,4,5,6,7,8]
这里有一些代码:
root = ['A', 'B', 'C', 'D']
replacements = [1, 2, 3, 4, 5, 6, 7, 8]
y = root.index('A')
new_list = []
for j in replacements:
root[y]=j
print root
new_list.append(root)
但输出正在弄乱我,Python文档也无济于事。我的追加功能必须有一些东西。你可以看到我打印root并且出现了所需的结果但是当我查看new_list时它重复了最后一个列表8次;
[1, 'B', 'C', 'D']
[2, 'B', 'C', 'D']
[3, 'B', 'C', 'D']
[4, 'B', 'C', 'D']
[5, 'B', 'C', 'D']
[6, 'B', 'C', 'D']
[7, 'B', 'C', 'D']
[8, 'B', 'C', 'D']
和new_list:
[[8, 'B', 'C', 'D'], [8, 'B', 'C', 'D'], [8, 'B', 'C', 'D'],
[8, 'B', 'C', 'D'], [8, 'B', 'C', 'D'], [8, 'B', 'C', 'D'],
[8, 'B', 'C', 'D'], [8, 'B', 'C', 'D']]
答案 0 :(得分:3)
替换:
new_list.append(root)
使用:
new_list.append(root[:])
前者向new_list
添加指向root
的指针。每个指针指向相同的数据。每次更新root
时,new_list
的每个元素都会反映更新后的数据。
稍后会向new_list
添加指向root
副本的指针。每份副本都是独立的。对root
的更改不会影响之前制作的root
副本。
比较一下:
>>> root = ['A', 'B', 'C', 'D']
>>> b = root
>>> b[0] = 1
>>> root
[1, 'B', 'C', 'D']
有了这个:
>>> root = ['A', 'B', 'C', 'D']
>>> b = root[:]
>>> b[0] = 1
>>> root
['A', 'B', 'C', 'D']
答案 1 :(得分:0)
John1024有一个很好的解决方案,我只想在这里再添加一个解决方案:
new_list = []
counter = 0
for j in replacements:
root[y]=j
new_list.append([])
new_list[counter].extend(root)
counter += 1
希望这可能对你有所帮助