将specif for loop转换为列表理解

时间:2018-09-17 18:41:33

标签: python python-3.x image-processing list-comprehension

是否可以将以下(伪)代码片段转换为python列表理解?

for img in imgs:
    for i in range(2):
       for j in range(2):
           final_img.append(correspondent_corner(img, i,j))
    final_img.append(center_crop(img))

此代码的目的是提取与图像的四个角相对应的4个裁切,以及中央裁切。在不需要中心但无法弄清楚这种情况的情况下,我可以实现此列表理解版本。

1 个答案:

答案 0 :(得分:2)

仅使用内置函数,列表推导和列表添加:

[item for sublist in [[correspondent_corner(img, i,j) for i in range(2) for j in range(2)] + [center_crop(img)] for img in range(5)] for item in sublist]

我通过使用嵌套列表推导进行内部循环来做到这一点:

...[correspondent_corner(img, i,j) for i in range(2) for j in range(2)]...

然后将结果附加到仅包含中心作物的列表中:

[[correspondent_corner(img, i,j) for i in range(2) for j in range(2)] + [center_crop(img)] for img in range(5)]

这给出了每个图像结果的嵌套列表,看起来像[[img0:00,img0:01,img0:10,img0:11,img0center],[img1:00...]]。可以使用另一种[item for sublist in list for item in sublist]类型的嵌套理解将其展平,它类似于

[item for sublist in [[correspondent_corner(img, i,j) for i in range(2) for j in range(2)] + [center_crop(img)] for img in range(5)] for item in sublist]