Список всех диагоналей в матрице без использования numpy - Python 3 - PullRequest
2 голосов
/ 23 апреля 2019

Допустим, я получил следующую матрицу:

[[5,4,3,2], [8,7,6,5], [4,3,2,0]]

Я хочу создать 2 отдельные функции, которые создают список всех диагоналей справа налево и слева направо без использования модуля numpy!

Например:

[[4], [8,3], [5,7,2], [4,6,0], [3,5], [2]]   # these are the right to left diagonals

Я пробовал несколько разных способов, но безуспешно.кроме того, я довольно широко сканировал переполнение стека для ответов, но не нашел ни одного, который не содержал бы numpy.

edit: вот код, который я написал, который должен обрабатывать некоторые диагонали:

L = [[5, 4, 3, 2], [8, 7, 6, 5], [4, 3, 2, 0]]


def search_diagonally_rtl(matrix):
    num_of_rows = len(matrix)
    num_of_cols = len(matrix[0])
    diag_mat = list()
    for i in range(0, num_of_rows):
        diag_mat.append([matrix[i][0]])
    row_index = 0
    for row in diag_mat:
        for k in range(0, row_index):
            i = k
            j = 1
            while i >= 0:
                row.append(matrix[i][j])
                i = i - 1
                j = j + 1
        row_index += 1

вывод: [[5], [8, 4], [4, 4, 7, 3]]

, но должен быть: [[5], [8, 4], [4, 7, 3]]

1 Ответ

0 голосов
/ 23 апреля 2019
def diag1(x, startline):
    out = []
    line = startline
    col = 0
    while line < len(x) and col < len(x[0]):
        out.append(x[line][col])
        line +=1
        col += 1
    return out


def diag2(x, startcol):
    out = []
    line = 0
    col = startcol
    while line < len(x) and col < len(x[0]):
        out.append(x[line][col])
        line +=1
        col += 1
    return out


def diag(x):
    out = []
    for startline in range(len(x) - 1, -1, -1):
        out.append(diag1(x, startline))
    for startcol in range(1, len(x[0])):
        out.append(diag2(x, startcol))
    return out


x = [[5,4,3,2], [8,7,6,5], [4,3,2,0]]
print(diag(x))  # [[4], [8, 3], [5, 7, 2], [4, 6, 0], [3, 5], [2]]

diag1 начинается с левой границы матрицы и возвращает диагонали, а diag2 начинается с верхней границы. diag объединяет два метода.
Небольшие изменения должны быть сделаны для диагоналей в другом направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...