Python for循环故障



我的程序是这样开始的

array=[[[0,0]]*4]*4
for i in range(4):
for k in range(4):
array[i][k]=[i,k]
for n in range(4):
print(array[n])

但是输出这个

[[3, 0], [3, 1], [3, 2], [3, 3]]
[[3, 0], [3, 1], [3, 2], [3, 3]]
[[3, 0], [3, 1], [3, 2], [3, 3]]```
I'm using 3.11, I tried switching i and k around, switching the names for the variables, doing

array[我][k] [0] = karray[我][k][1] =我

etc. but none of it has worked. I want it to output 
```[[0, 0], [0, 1], [0, 2], [0, 3]]
[[1, 0], [1, 1], [1, 2], [1, 3]]
[[2, 0], [2, 1], [2, 2], [2, 3]]
[[3, 0], [3, 1], [3, 2], [3, 3]]```

这也可以认为是两个数组[0, 1, 2, 3]的笛卡尔积。您可以使用itertools.product很容易地实现这一点。

import itertools 
list(itertools.product([0, 1, 2, 3], [0, 1, 2, 3]))

返回
[(0, 0), (0, 1), (0, 2), (0, 3), 
(1, 0), (1, 1), (1, 2), (1, 3), 
(2, 0), (2, 1), (2, 2), (2, 3), 
(3, 0), (3, 1), (3, 2), (3, 3)]

这也相当于只做:

[[x, y] for x in [0, 1, 2, 3] for y in [0, 1, 2, 3]]
[[0, 0], [0, 1], [0, 2], [0, 3], 
[1, 0], [1, 1], [1, 2], [1, 3], 
[2, 0], [2, 1], [2, 2], [2, 3], 
[3, 0], [3, 1], [3, 2], [3, 3]]
array = [[[0, 0]] * 4] * 4

你认为你有许多独立的零对列表。

但实际上只有很少的列表有一堆指向它们的指针。也就是说,每次赋值都会更新一个列表元素,但是因为多个外部列表都指向容器,此更新似乎会影响多个位置。


你会更快乐PIP安装numpy(import numpy as np)和赋值

array = np.array([[[0, 0]] * 4] * 4)

将分配单独的整数存储空间对于每个单元格,您可以更新它们独立地,随心所欲,没有惊喜。


下面是一个更简单的效果演示

>>> a = b = c = [5, 6, 7, 8]
>>> a
[5, 6, 7, 8]
>>> b
[5, 6, 7, 8]
>>> c
[5, 6, 7, 8]
>>> 
>>> 
>>> a[2] = 20
>>> 
>>> a
[5, 6, 20, 8]
>>> 
>>> b
[5, 6, 20, 8]
>>> 
>>> c
[5, 6, 20, 8]

注意b是指向与a相同的列表的指针,还有c.

只有一个列表,它没有只有一个名字。从某种意义上说,这些都是三个名字同样有效。我们有三个对相同底层列表的引用。

相关内容

  • 没有找到相关文章

最新更新