gpt4 book ai didi

python - 为什么python多维列表乘法(串联)会出现这个错误?

转载 作者:行者123 更新时间:2023-12-01 07:33:04 26 4
gpt4 key购买 nike

我想创建一个没有很长代码的Python多维空列表。所以我尝试了这个:

a = [[[]] * 2] * 2  

事实证明,当我打印(a)时,我得到了多维空列表:

[[[], []], [[], []]]

但是当我将某些内容附加到一个空列表中时:

a[0][0].append(np.array((1.5,2.5)))  

所有空列表都有这个 np.array:

[[[array([1.5, 2.5])], [array([1.5, 2.5])]], [[array([1.5, 2.5])], [array([1.5, 2.5])]]]  

但是如果我创建如下所示的多维空列表:

b = []  
for i in range(2):
c = []
for j in range(2):
c.append(([]))
b.append(c)

它有效。当我打印(b)时,我仍然得到:

[[[], []], [[], []]]  

但是当我这样做时

b[0][0].append(np.array((1.6,2.6))) 

然后打印(b),我得到:

[[[array([1.6, 2.6])], []], [[], []]]  

这就是我想要的。

为什么会发生这种情况?

我使用的是Python 3.6.8

这是我的代码:

这是错误的:

a = [[[]] * 2] * 2  
print(a)
a[0][0].append(np.array((1.5,2.5)))
print(a)

这就是我想要的:

b = []  
for i in range(2):
c = []
for j in range(2):
c.append(([]))
b.append(c)
print(b)
b[0][0].append(np.array((1.6,2.6)))
print(b)

为什么a = [[[]] * 2] * 2无法工作,我怎样才能很快创建这个?谢谢!

最佳答案

好吧,你做到了:

[[]]

这将创建一个包含列表的元素列表。但是当你这样做时:

[[]] * 4

这会创建 4 个元素列表,每个元素都包含相同元素[]。做这样的事情:

for v in [[]] * 4:
print(id(v))

它打印:

46970800
46970800
46970800
46970800

如果你每次需要这样的东西时都想要新的列表对象:

[ [] for _ in range(4) ]

而不是

[[]] * 4

首先将创建 4 个列表,每个列表都是唯一的。第二个将创建 4 个列表,每个列表都相同。

关于python - 为什么python多维列表乘法(串联)会出现这个错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57131323/

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