Проверить матрицу квадратную? (Python)
Я хочу проверить матрицу 2x2 [[5,6],[7,8]], чтобы увидеть, квадрат ли это.
Я запускаю свой код, и я должен получить True, но вместо этого я получил False...
def square(sq):
for element in sq:
if element:
return False
return True
4 ответа
Если вы хотите проверить, является ли матрица NxN, вы можете использовать:
def isSquare (m): return all (len (row) == len (m) for row in m)
Как вы сказали в своем комментарии: если длина всех строк равна количеству строк.
Дано m
это numpy
матрица и вы импортировали numpy
def square(m):
result = True if m.shape[0] == m.shape[1] else False
return result
Вы передаете список списков в качестве параметра. Вы привели пример [[5,6],[7,8]].
Давайте посмотрим, что ваш код делает с этим вводом.
for element in sq:
if element:
return False
return True
Давайте начнем с цикла for:
for element in sq:
Это перебирает ваш список, поэтому первая итерация вашего элемента - [5,6], а следующая [7,8].
Следующее, что делает ваш код, это проверяет, является ли элемент True. Список верен, если он не пустой. Поэтому на первой итерации ваш код возвращает False.
Пример ввода, где ваш код будет возвращать True, будет [[], []].
Чтобы проверить, является ли матрица квадратной, вы хотите увидеть, все ли размеры списка одинаковы. Что-то вроде этого:
def square(sq):
rows = len(sq)
for row in sq:
if len(row) != rows:
return False
return True
Если ваша матрица представляет две координаты в двухмерном пространстве, ваш пример - квадрат. Вы можете определить это, проверив, что разница значений x и y одинакова. Код может быть:
def square(sq):
delta_x = sq[1][0] - sq[0][0]
delta_y = sq[1][1] - sq[0][1]
return delta_x == delta_y
Это также должно работать.
А это список с матрицей.
if not A:
return True
m = len(A)
n = len(A[0])
if m == n:
return True
else:
return False