是否可以将以下(伪)代码片段转换为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个裁切,以及中央裁切。在不需要中心但无法弄清楚这种情况的情况下,我可以实现此列表理解版本。
答案 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]