gpt4 book ai didi

python - 奇怪的额外循环

转载 作者:太空狗 更新时间:2023-10-30 00:51:23 28 4
gpt4 key购买 nike

我对 Python 还是有点陌生​​,但是,我现在感觉 真的 很愚蠢,因为我刚刚花了一个小时试图弄清楚为什么这个 for 循环没有做我想。我不应该在 for 循环上花费一个小时。不管怎样,我正在尝试生成一个字典列表,并为每个字典分配一个唯一的编号,所以我这样做...

def initiate(n):
records = {'num':0,'blah':0,'doubleblah':0}
x = []
for i in range(n):
x.append(records)
x[i]['num'] = i
return x

x = initiate(4)
print(x)

我希望函数返回这个 --

[
{'num': 0, 'doubleblah': 0, 'blah': 0},
{'num': 1, 'doubleblah': 0, 'blah': 0},
{'num': 2, 'doubleblah': 0, 'blah': 0},
{'num': 3, 'doubleblah': 0, 'blah': 0}
]

但它实际上返回了这个——

[
{'num': 3, 'doubleblah': 0, 'blah': 0},
{'num': 3, 'doubleblah': 0, 'blah': 0},
{'num': 3, 'doubleblah': 0, 'blah': 0},
{'num': 3, 'doubleblah': 0, 'blah': 0}
]

...当我向函数中添加一些打印语句时,我发现它似乎将数字添加到列表中的每个字典,而不仅仅是当前字典。我真的不明白代码将如何添加到所有字典中,因为我明确使用 x[i] = i 仅将数字添加到当前字典中。

最佳答案

实际情况是您每次都将对同一词典的引用附加到列表中。

print list(map(id, initiate(4)))
# [42283920, 42283920, 42283920, 42283920]

您的函数正确写为:

def initiate(n):
return [ {'num': i, 'blah': 0, 'doubleblah': 0} for i in range(n) ]

这每次都会生成一个新的字典实例。

关于python - 奇怪的额外循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13017027/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com