Проверить матрицу квадратную? (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
Другие вопросы по тегам