将特定的循环转换为列表理解

问题描述 投票:0回答:1

有没有办法将以下(伪)代码片段转换为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个角和中心裁剪的4种作物。如果不需要中心但我无法弄清楚这种情况,我可以实现这个列表理解版本。

python python-3.x image-processing list-comprehension
1个回答
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]
© www.soinside.com 2019 - 2024. All rights reserved.