Почему индекс нулей в списке равен нулю?
У тебя в строках массива несколько нулей. Метод index() по умолчанию находит только первое искомое значение. Если бы ты почитал документацию, ты бы это понял, и увидел, как это обойти.

list.index(x[, start[, end]])

    Return zero-based index in the list of the first item whose value is equal to x. Raises a ValueError if there is no such item.

    The optional arguments start and end are interpreted as in the slice notation and are used to limit the search to a particular subsequence of the list. The returned index is computed relative to the beginning of the full sequence rather than the start argument.


Вообще, раз уж ты ручками перебираешь строки и ячейки матрицы, используй enumerate().
for i_row, row in enumerate(grid):  # row == grid[i_row]
    for i_col, value in enumerate(row):  # value == row[i_col]
        # далее сам
Перебирать данные циклами и сравнивать с нулем. Тогда индекс будет получаться автоматически.