for x in range(0,img_row):
for y in range(0,img_col):
img_lst.append([img[x,y][0],img[x,y][1],img[x,y][2]])
return img_lst
我如何在这里使用列表理解?
img_lst = [img[x,y][0], img[x,y][1], img[x,y][2] y for y in range(0,img_col) for x in range(0, img_row)]
我试过了,但它给出了我的无效语法,当我在开头删除“y”时,它告诉我 Y 未定义
整个函数:
def cvimg_to_list(img):
img_row = img.shape[0]
img_col = img.shape[1]
img_lst=[]
img_lst = [img[x,y][0], img[x,y][1], img[x,y][2] y for y in range(0,img_col) for x in range(0, img_row)]
return img_lst
请您参考如下方法:
要将调用 list.append() 的嵌套循环转换为列表推导式,您所要做的就是在 .append(...) 之间移动所有内容> 前面的括号,删除 for 循环后的 : 冒号,最后在结果周围添加 [...]:
[
[img[x,y][0],img[x,y][1],img[x,y][2]]
for x in range(0,img_row)
for y in range(0,img_col)
]
请注意,for 循环的顺序不会改变!
然后可以将其放在一条线上;我添加了一些空格以提高可读性并简化了 range() 调用:
[[img[x, y][0], img[x, y][1], img[x, y][2]]
for x in range(img_row) for y in range(img_col)]
因为您使用 img[x, y] 的前 3 个值构建了一个新列表,所以您还可以使用切片:
[img[x, y][:3] for x in range(img_row) for y in range(img_col)]
您在尝试中犯了三个错误;您交换了 for 循环的顺序,您添加了一个额外的、杂散的 y,并且您删除了列表对象的 ] 右括号您产生每次迭代。
