gpt4 book ai didi

Python3 列表填充空字典

转载 作者:行者123 更新时间:2023-11-28 21:32:35 25 4
gpt4 key购买 nike

我找到了way制作一个用相同文字填充的列表。

所以我做了以下操作:

my_list_of_dict = [{}] * 3

my_list_of_dict[0][0] = 1
my_list_of_dict[0][1] = 2

print(my_list_of_dict)
# What I thought : [{0: 1, 1: 2}, {}, {}]
# What actually happened : [{0: 1, 1: 2}, {0: 1, 1: 2}, {0: 1, 1: 2}]

这是一个错误吗?或预期的功能?

似乎 python 并不是每次都初始化新的字典,而是只是将给定的字典分配给列表。

另外,我如何call(pronouce) [] * n?这是一种列表理解吗?

最佳答案

{} 返回对字典的引用,然后通过 *3 您可以对同一个 dict 进行 3 次引用。要解决此问题,请使用不同的方法:

[{} for _ in range(3)]

使用(0)并不重要,因为它们是不可变的,因此一旦您修改列表中的值,您就“创建”了一个新数字,然后引用它通过列表:

>>> l = [0]*3
>>> [id(x) for x in l]
[10910368, 10910368, 10910368]
>>> l[0] = 10
>>> [id(x) for x in l]
[10910688, 10910368, 10910368]

但是对于可变对象,您可以修改直接引用的对象,因此列表中的所有位置都知道该更改,因为它们指向同一个对象:

>>> l = [[]]*3
>>> l
[[], [], []]
>>> l[0].append(10)
>>> l
[[10], [10], [10]]
>>> [id(x) for x in l]
[139858640463368, 139858640463368, 139858640463368]

通过使用其他推导式,您将在推导式的每个循环中创建一个实例:

>>> l = [{} for _ in range(3)]
>>> l[0]["foo"] = 10
>>> l
[{'foo': 10}, {}, {}]

关于Python3 列表填充空字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56160509/

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