В конечном счете, я хотел бы использовать уменьшить и найти продукт. Я знаю, как выполнить эту задачу, используя циклы for, но я понимаю, что списочные понимания быстрее и, как правило, более «питонны», поэтому я изо всех сил пытаюсь понять, как сделать желаемое движение внутри понимания списка.
Итак, вот пример:
grid = [[a, b, c, d]
[e, f, g, h]
[i, j, k, l]
[m, n, o, p]
[q, r, s, t]] # All the sublists are integer lists.
Итак, в конечном итоге я бы хотел reduce()
несколько элементов этих подсписков, выбирая их по диагонали. Итак, скажем, для этого примера я хочу пройти по диагонали вниз-вправо длины 3. Если я начну с [0] [0], мое понимание списка будет работать через [a, f, k]
. Вот некоторый код, который я пробовал до сих пор:
diag_len = 3
i = 0
j = 0
# Purposely omitting the reduce() part of this next line
desired_list = grid[i:i + diag_len][j:j + diag_len]
Как и прежде, код выше принимает все подсписки индексов 0, 1 и 2 в grid
, а не только три элемента в нужной диагонали. for
эквивалент для того, что я хочу, мое текущее решение выглядит следующим образом:
for z in range(diag_len):
desired_list.append(num_grid[i + z][j + z])
desired_product *= desired_list[z]
Я посмотрел на аналогично помеченные вопросы о SO, но не смог найти никого, кто бы двигался по двум индексам одновременно, используя понимание списка, извинения, если я его пропустил.