使用for循环更改列表中的数据时,每次循环迭代时如何将列表附加到字典?

时间:2014-11-07 08:55:13

标签: list loops for-loop python-3.x dictionary

基本上,想迭代一个数值数据列表来改变它的内容,其中列表开头的数字移动到最后,然后数据移到左边。虽然我已经实现了这一点,因为循环的打印内容给出了期望的结果,当试图将所述循环的内容附加到所述字典时,它仅在最后的迭代中执行此操作。这是我的代码:

minor=[1,2,3,4,5,6]
MNP = {'scale degree' : []
}

def patterns(scale):
    for i in scale:
        print (scale)

        scale.insert(len(scale),scale[0])
        del(scale[0])

        MNP['scale degree'].append(scale)

使用函数模式,这是输出:

>>> patterns(minor)

顺便提一下,列表是次要的。

输出:

[1, 2, 3, 4, 5, 6]
[2, 3, 4, 5, 6, 1]
[3, 4, 5, 6, 1, 2]
[4, 5, 6, 1, 2, 3]
[5, 6, 1, 2, 3, 4]
[6, 1, 2, 3, 4, 5]

然而,当我尝试在MNP词典中打印列表内容,缩放度时,结果是:

  
    
      

MNP ['比例度']            [[1,2,3,4,5,6],[1,2,3,4,5,6],[1,2,3,4,5,6],[1,2,3, 4,5,6],[1,2,3,4,5,6],[1,2,3,4,5,6]]

    
  

我对这个结果感到非常困惑,好像输出的变化取决于所调用的操作?

提前感谢您的帮助。同样值得注意的是,我已经坚持了很长一段时间,所以如果有任何资源可以帮助我理解类似事件我肯定不会把它传递出来。

1 个答案:

答案 0 :(得分:-1)

发生这种情况的原因是您在MNP['scale degree']中存储的内容仅是对scale的引用。因此,当您更改scale时,MNP['scale degree']中的条目也会更改scale。为避免这种情况,您需要做的是每次附加时复制list(即创建新的copy而不是添加引用)。您可以使用import copy minor=[1,2,3,4,5,6] MNP = {'scale degree' : [] } def patterns(scale): for i in scale: print (scale) scale.insert(len(scale),scale[0]) del(scale[0]) MNP['scale degree'].append(copy.copy(scale)) patterns(minor) print(MNP['scale degree']) 模块执行此操作:

{{1}}