Что делает это понимание списка? - PullRequest
0 голосов
/ 11 февраля 2020
dp = [[0 for x in range(m+1)] for x in range(n+1)]

Может кто-нибудь объяснить этот код, что на самом деле происходит в этой части кода? Я думаю, что это включает в себя понимание списка.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020
dp = [[0 for x in range(m+1)] for x in range(n+1)]

Это эквивалентно

for x in range(n+1):
  for x in range(m+1):
    dp = 0

Это создаст двумерный массив размером (n + 1) x (m + 1). Предположим, что n = 2 и m = 3. Затем внешний l oop будет запускаться 3 раза, и каждый раз, когда запускается внешний l oop, внутренний l oop будет выполняться 4 раза. Таким образом, он создаст список [0 0 0 0]```` (in the inner loop). Now, as the inner loop is executing thrice, there will be 3 lists [0 0 0 0] [0 0 0 0] [0 0 0 0] `` `, и они в целом сформируют матрицу 3 x 4.

This может быть лучше понято как

for x in range(3):
    for x in range(4):
        print(0, end = ' ')
    print()

Вышеуказанные выводы фрагмента

0 0 0 0 
0 0 0 0 
0 0 0 0 
0 голосов
/ 11 февраля 2020

В основном dp будет 2D-матрицей измерения (n + 1, m + 1).

  1. [0 for x in range(m+1)]: это создаст список размером (m+1), инициализированный с нули.

    Например: если m=2, список будет [0,0,0]

  2. [[0 for x in range(m+1)] for x in range(n+1)]: Теперь, когда мы увидим весь код вместе, мы получим 2D-список.

    Например, если n=2, dp будет [[0,0,0], [0,0,0], [0,0,0]]

...