首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列表python 3的双重迭代

列表python 3的双重迭代
EN

Stack Overflow用户
提问于 2017-11-16 10:22:31
回答 2查看 283关注 0票数 1
代码语言:javascript
复制
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

我如何在这里使用列表理解?

代码语言:javascript
复制
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的定义。

整个职能:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-16 10:25:36

要将带有list.append()调用的嵌套循环转换为列表理解,只需将.append(...)括号之间的所有内容移到前面,在for循环之后删除:冒号,最后在结果周围添加[...]

代码语言:javascript
复制
[
[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()调用:

代码语言:javascript
复制
[[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个值的新列表,所以您也可以使用切片:

代码语言:javascript
复制
[img[x, y][:3] for x in range(img_row) for y in range(img_col)]

您在尝试中犯了三个错误;您交换了for循环的顺序,添加了一个额外的、偏离的y,并为每次迭代生成的list对象删除了]结束括号。

票数 4
EN

Stack Overflow用户

发布于 2017-11-16 11:21:36

我不太确定你想要实现什么,但是如果我的假设是正确的(你想从opencv打开的图像的三个通道中得到像素值的列表),你可以使用numpy来完成这个任务。

代码语言:javascript
复制
img_lst=img.reshape(-1,3).tolist()

请记住,cv2将图像加载为BGR而不是RGB。

注意:没有正确地回答这个问题,我宁愿把这作为一个评论,但我没有足够的声誉。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47327116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档