gpt4 book ai didi

Python 二维数组在某处丢失数据

转载 作者:行者123 更新时间:2023-11-28 18:51:29 25 4
gpt4 key购买 nike

在尝试使用 PIL 和 python 构建颜色网格时,我遇到了一个令人沮丧的问题。我可以遍历我的网格并提取颜色就好了,但是当我去读回它们时,由于某种原因,其中一个或多个总是消失了。这似乎是一个令人难以置信的基本错误,但却是一个非常令人沮丧的错误。

这是有问题的代码。 cx和cy刚好指向网格中每个样本点的中心,该颜色为样本区域中使用最多的颜色

image = ImageGrab.grab(box)
matrix = [[None] * ROWS] * COLS

c1 = set()
for row in range(ROWS):
for col in range(COLS):
cx = (col * CELLW) + int(CELLW / 2)
cy = (row * CELLH) + int(CELLH / 2)
sample_box = (cx - SAMPLE_SIZE, cy - SAMPLE_SIZE, cx + SAMPLE_SIZE, cy + SAMPLE_SIZE)
sample = image.crop(sample_box)
color = sorted(sample.getcolors())[-1][1]
matrix[col][row] = color
c1.add(color)
print(c1)

c2 = set()
for row in range(ROWS):
for col in range(COLS):
c2.add(matrix[col][row])
print(c2)

如您所见,(我认为)应该发生的是 c1 保存所有独特的颜色并打印它们。然后 c2 循环相同的东西并打印独特的颜色。我不明白为什么他们应该不同,但他们是。

输出如下:

{(240, 240, 240), (255, 255, 255), (252, 252, 252)}
{(240, 240, 240), (255, 255, 255)}

对于这个令人沮丧的问题的任何帮助将不胜感激

最佳答案

我认为这里的问题是您的矩阵包含对同一列表的多个引用。考虑:

>>> matrix = [[None]*3]*4
>>> matrix
[[None, None, None], [None, None, None], [None, None, None], [None, None, None]]
>>> matrix[1][1]=0
>>> matrix
[[None, 0, None], [None, 0, None], [None, 0, None], [None, 0, None]]

你可以通过初始化你的“矩阵”来解决这个问题:

matrix = [[None]*ROWS for _ in range(COLUMNS)] 

如果您愿意,可以在 python 2.x 中使用 xrange ...

关于Python 二维数组在某处丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12282483/

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