Преобразуйте указанный цикл в понимание списка - PullRequest
0 голосов
/ 17 сентября 2018

Есть ли способ превратить следующий (псевдо) фрагмент кода в понимание списка 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 угла изображения и центр обрезки тоже.Я мог бы получить версию для понимания списка в случае, если центр не нужен, но не смог выяснить для этого случая.

1 Ответ

0 голосов
/ 17 сентября 2018

Используя только встроенные функции, списки и добавления в список:

[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]
...