Python附加在循环中工作

2024-04-20 14:30:05 发布

您现在位置:Python中文网/ 问答频道 /正文

当我尝试在“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}]
>>> 

如何解决这个问题?为什么真正的结果和我心目中的结果不一样呢?你知道吗


Tags: in示例列表forparamparamsellist
3条回答

问题是,您对列表中的每个条目使用相同的词典。要解决此问题,请在for循环中的el = {}上方添加el['param'] = param。你知道吗

el始终引用同一个字典,list.append(el)引用添加到该字典,而不是当前值的副本添加到列表中。您没有5个不同词典的列表,但是有一个对一个词典的5个引用的列表。你知道吗

要更详细地了解发生了什么,请通过循环每次打印listel。您将看到一个不断增长的列表,它总是引用当前值el。你知道吗

列表中的每个元素都包含对相同dict的引用。这就是为什么在每个元素中都看到相同的数字。也许你想做:

params = [1,2,3,4,5]

a = []
for param in params:
    el = {'param': param}
    a.append(el)

另外,要注意用变量名来隐藏内建项,如list。你知道吗

相关问题 更多 >