当我在“for in”循环中尝试填充列表时,我发现了一些“神秘”问题。
以下是示例:
>>> params = [1,2,3,4,5]
>>> el = {'param':0}
>>> el
{'param': 0}
>>> list = []
>>> for param in params:
... el['param'] = param
... list.append(el)
...
>>> print(list)
[{'param': 5}, {'param': 5}, {'param': 5}, {'param': 5}, {'param': 5}]
>>>
但我认为结果应该是
>>> print(list)
[{'param': 1}, {'param': 2}, {'param': 3}, {'param': 4}, {'param': 5}]
>>>
如何解决此问题?为什么真正的结果与我心中的结果不相似?
答案 0 :(得分:3)
列表中的每个元素都包含对相同 dict的引用。这就是为什么你在每个元素中看到相同的数字。也许你想做:
params = [1,2,3,4,5]
a = []
for param in params:
el = {'param': param}
a.append(el)
另外,请注意使用变量名隐藏内置文件,例如list
。
答案 1 :(得分:2)
el
始终引用相同的字典,list.append(el)
将引用添加到该字典,而不是其当前值的副本到列表中。您没有5个不同词典的列表,但列出了5个对一个词典的引用。
要详细了解详细情况,请每次循环播放list
和el
。您会看到一个不断增长的列表,它总是引用el
的当前值。
答案 2 :(得分:1)
问题是您对列表中的每个条目使用相同的字典。要解决此问题,请在for循环中将el = {}
添加到el['param'] = param
以上。
答案 3 :(得分:1)
您在每次迭代中修改相同的dict
并将其添加到list
。将此dict的副本添加到list
时,您将获得其他结果。
只需拨打list.append(dict(el))
即可。
答案 4 :(得分:0)
您正在修改一个dict对象。您可以多次向列表添加对该dict的引用。因此,您的列表包含对同一个dict对象的5个引用。