当我尝试在“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}]
>>>
如何解决这个问题?为什么真正的结果和我心目中的结果不一样呢?你知道吗
问题是,您对列表中的每个条目使用相同的词典。要解决此问题,请在for循环中的
el = {}
上方添加el['param'] = param
。你知道吗el
始终引用同一个字典,list.append(el)
将引用添加到该字典,而不是当前值的副本添加到列表中。您没有5个不同词典的列表,但是有一个对一个词典的5个引用的列表。你知道吗要更详细地了解发生了什么,请通过循环每次打印
list
和el
。您将看到一个不断增长的列表,它总是引用当前值el
。你知道吗列表中的每个元素都包含对相同dict的引用。这就是为什么在每个元素中都看到相同的数字。也许你想做:
另外,要注意用变量名来隐藏内建项,如
list
。你知道吗相关问题 更多 >
编程相关推荐