在循环中追加列表

时间:2014-10-23 02:12:59

标签: python append

我在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']]

2 个答案:

答案 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

希望这可能对你有所帮助