一段时间以来,我一直在尝试解决这本教科书的问题,但是有点卡住了。
问题:
我们为模块
image
提供了过程file2image(filename)
读取存储在文件中的图像
的值.png
格式。导入此过程并调用它, 提供包含此格式图像的文件名作为参数,并指定返回的值 变量data
data的值是一个列表列表,
data[y][x]
是像素(x,y)
的强度。像素点(0,0)
在图像的左下角,像素(width-1, height-1)
在图像的右上角。 像素的强度是介于0(黑色)和255(白色)之间的数字。 使用一种理解将复数集pts
分配给列表x+yi
,以便 像素(x, y)
的图像强度小于120。
这是提供的相关方法
def file2image(path):
""" Reads an image into a list of lists of pixel values (tuples with
three values). This is a color image. """
(w, h, p, m) = png.Reader(filename = path).asRGBA() # force RGB and alpha
return [_flat2boxed(r) for r in p]
我真的不确定如何将这3个值解析为一个理解,有人猜测吗?
我理解数据结构的方式如下:[[((x,y,z)],[(x,y,z)] ... etc]
所以我的代码显然是错误的,但是我尝试了
data = img.file2image("img01.png")
data = img.color2gray(data)
pts = [(x,y,z) for (x,y,z) in data]
plot(pts)
答案 0 :(得分:0)
这是描述目标的非常糟糕的描述文字,这是我对列表列表和列表列表的理解
>>> [[v for v in range(5)] for _ in range(5)]
[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
>>> [[[v for v in range(5)] for _ in range(5)] for _ in range(5)]
[[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]], [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]], [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]], [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]], [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]]
>>>
_
循环中的for
丢弃了迭代器中的变量,因为我不需要存储它