Я хочу написать функцию, которая принимает один аргумент, квадратную 2D-матрицу и возвращает диагональ введенной матрицы из интерактивного окна IDLE.

Я пробовал несколько способов, но всякий раз, когда я вводил матрицу (от 1 до 16 в формате 4 × 4), я получал TypeError высказывание 4 positional arguments but 5 were given.

Я возился с этим, пытаясь использовать input(), чтобы иметь возможность ввести матрицу, которую я хочу, но я все еще получаю ту же ошибку.

Вот что я хочу делать:

>>> m1 = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
>>> diagonal(m1)
[1, 6, 11, 16]

Как бы я пошел по этому поводу? Я также видел много постов, использующих Numpy, но я не совсем уверен, разрешено ли использовать это назначение.

0
FindingAlby 13 Апр 2019 в 11:54

2 ответа

Лучший ответ

enumerate() очень удобно здесь с квадратной матрицей, потому что это даст вам правильные индексы, когда вы будете проходить по своим массивам. Вы можете использовать это в понимании, чтобы получить и правильный индекс и правильную матрицу.

def diagonal(mat):
    return [el[i] for i, el in enumerate(mat)]

m1 = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]

diagonal(m1)
>> [1, 6, 11, 16]
2
Mark Meyer 13 Апр 2019 в 08:57

Попробуйте это:

def diagonal(m1):
    n = len(m1)
    l = []
    for i in range(n):
        l.append(m1[i][i])

    return l

m1 = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
print(diagonal(m1))
0
SamratV 13 Апр 2019 в 09:04