Понимание матрицы печати по спирали по часовой стрелке в Python - PullRequest
0 голосов
/ 28 октября 2019

Я нашел это упражнение для изучения матриц или двухмерных векторов в Python (я новичок)

'''
start row index - k 
end row index - m
start column index - l
end column index - n
iterator - i 
array or list - a
'''
# Python3 program to print  
# given matrix in spiral form 
def spiralPrint(m, n, a) : 
    k = 0; l = 0

    ''' k - starting row index 
        m - ending row index 
        l - starting column index 
        n - ending column index 
        i - iterator '''


    while (k < m and l < n) : 

        # Print the first row from 
        # the remaining rows  
        for i in range(l, n) : 
            print(a[k][i], end = " ") 

        k += 1

        # Print the last column from 
        # the remaining columns  
        for i in range(k, m) : 
            print(a[i][n - 1], end = " ") 

        n -= 1

        # Print the last row from 
        # the remaining rows  
        if ( k < m) : 

            for i in range(n - 1, (l - 1), -1) : 
                print(a[m - 1][i], end = " ") 

            m -= 1

        # Print the first column from 
        # the remaining columns  
        if (l < n) : 
            for i in range(m - 1, k - 1, -1) : 
                print(a[i][l], end = " ") 

            l += 1


a =[[1,2,3,4,5],
    [6,7,8,9,10],
    [11,12,13,14,15],
    [16,17,18,19,20]]
R = 4
C = 5

spiralPrint(R,C,a)

Я хотел понять логику этого, я имею в виду, почему они использовали 4 цикла для итерации ипочему они присваивают индексы в виде строк и столбцов? Кроме того, как функция точно знает, что в конце элемента она должна пройти под вторым списком и обойти?

1 Ответ

0 голосов
/ 29 октября 2019

Существует четыре цикла for, по одному на каждую сторону спирали. Каждая итерация цикла while записывает одно кольцо матрицы. k и m контролируют, сколько из каждого бокового столбца должно быть напечатано. k начинается с 0 и m с высоты матрицы. Каждый раз, когда печатается верхняя строка, k увеличивается на 1, поэтому последующие столбцы для печати начинаются на одну строку ниже. Каждый раз, когда печатается нижняя строка, m уменьшается на 1, поэтому последующие столбцы, которые должны быть напечатаны, останавливаются на одну строку выше.

Аналогично, l и n определяют, сколько нужно каждой строкедля печати и настройки каждый раз при печати столбца.

Все будет проще, если вы нарисуете матрицу на листе бумаги и выписаете k, m, l иn пока вы отмечаете печатаемые части.

Это упражнение является хорошей иллюстрацией работы диапазонов в Python.

...