Skip to main content
 首页 » 编程设计

python之双重迭代到列表python 3

2025年05月04日21lexus

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,并且您删除了列表对象的 ] 右括号您产生每次迭代。