【问题标题】:When changing data inside a list using a for loop, how do you append the list to a dictionary each time the loop iterates?使用 for 循环更改列表中的数据时,如何在每次循环迭代时将列表附加到字典中?
【发布时间】:2014-11-07 08:55:12
【问题描述】:

基本上,想要遍历数字数据列表以更改其内容,其中列表开头的数字移动到最后,然后数据向左移动。虽然我已经实现了这一点,因为循环的打印内容给出了预期的结果,当试图将所述循环的内容附加到所述字典时,它只在最终迭代中这样做。这是我的代码:

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]]

我对这个结果感到非常困惑,好像输出会根据调用的操作而变化?

提前感谢您的帮助。还值得注意的是,我已经被这个问题困扰了很长时间,所以如果有任何资源可以帮助我理解类似的事件,我当然不会放弃。

【问题讨论】:

  • 您正在用对同一列表对象的引用填充MNP['scale degree']
  • Python: list of lists 的可能重复项
  • 嗨,乔恩,非常感谢您的反馈,您知道这方面的吗?哦,顺便说一句,我不太确定参考是什么,至少在这种情况下,但我会立即调查。
  • 如果您阅读了我链接到的副本,答案就说明了这一点。

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


【解决方案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'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    • 2021-08-17
    • 2014-07-06
    • 2020-04-25
    • 1970-01-01
    • 2020-12-04
    相关资源
    最近更新 更多