检查对称性的代码在某些测试用例中失败

时间:2015-07-06 19:25:53

标签: python python-2.7

我在尝试让所有代码运行这段代码时遇到了麻烦:

def symmetric(p):
    """ returns true if list is symmetric"""
    if p==[]:return True
    n=len(p)
    m=len(p[0])
    if m !=n:
        return False
    i=0
    j=0
    t=False
    while i < n:
        while j < n:
            if not p[i][j]==p[j][i]:
                return False
            j=j+1
        i=i+1
    return True

当我运行它时,它会在某些情况下通过。 我似乎无法看到我做错了什么。

我希望[['algebra', 'combinatorics', 'graphs'], ['combinatorics', 'topology', 'sets'], ['graphs', 'topology', 'sets']]返回False,但不会。{/ p>

1 个答案:

答案 0 :(得分:2)

break语句只会结束内部 while循环。

由于您已经发现不对称,只需使用return:

i, j = 0
while i < n:
    while j < n:
        if not p[i][j] == p[j][i]:
            return False
        j += 1
    i += 1
return True

但是,您不是要将每一行与同一索引处的每一列进行比较;因为你永远不会将j重置为0,在第一个while j < n循环后你将j == n并且你跳过所有剩余的循环。

在内设置j = 0 第一个while

i = 0
while i < n:
    j = 0
    while j < n:
        if not p[i][j] == p[j][i]:
            return False
        j += 1
    i += 1
return True

更好的是,在for上使用range()循环:

for i in range(n):
    for j in range(n):
        if not p[i][j] == p[j][i]:
            return False
return True