2014-04-04 77 views
-2

我想测试[[5,6],[7,8]]的2×2矩阵,看它是否是方形。检查矩阵是否正方形? (Python)

我跑我的代码,我应该得到正确的,但我得到了假,而不是...

def square(sq): 
    for element in sq: 
     if element: 
      return False 
     return True 
+1

你的代码应该做什么? –

+0

矩阵是什么时候? – Hyperboreus

+1

根据定义,2x2矩阵是方形的,因为行数等于列数。 – Emmet

回答

3

如果你想检查矩阵是否是N×N的,你可以使用:

def isSquare (m): return all (len (row) == len (m) for row in m) 

正如您在评论中所说:如果所有行的长度等于行数。

+0

当然,将'len(m)'存储在一个变量中会更好,所以您不必在每次迭代中计算它。 –

+0

@AlexThornton在每个调用中真正计算的列表是“len(m)”吗?我以为这是在某个地方被记录下来的。 – Hyperboreus

+0

好奇的问题,做一个这样的线函数与lambda函数相比有什么好处?isSquare = lambda m:all(len(row)== len(m)for row in m)'? –

2

您将列表作为参数传递给列表。你给出的例子是[[5,6],[7,8]]。

让我们来看看你的代码如何处理这个输入。

for element in sq: 
    if element: 
     return False 
    return True 

让我们开始for循环:

for element in sq: 

这遍历列表,所以第一个迭代的元素是[5,6],下[7,8]。

你的代码的下一件事是检查元素是否为真。如果列表不为空,则列表为真。因此,在第一次迭代中,您的代码将返回False。

您的代码将返回True的示例输入是[[],[]]。

要检查一个矩阵是否为正方形,您需要查看所有列表维度是否相同。沿着这些线的东西:

def square(sq): 
    rows = len(sq) 
    for row in sq: 
     if len(row) != rows: 
      return False 
    return True 
0

如果你的矩阵代表两个坐标在二维空间,你的例子是一个正方形。您可以通过测试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 
0

这也应该起作用。

A是一个矩阵列表。

if not A: 
    return True 
m = len(A) 
n = len(A[0]) 
if m == n: 
    return True 
else: 
    return False