我想检查我的行和列是否相同

时间:2015-02-15 02:05:34

标签: python python-2.7

我想检查第1行是否等于第1列,第2行是否等于第2列,依此类推。如果矩阵等于其转置。

我尝试使用以下代码解决问题,但该函数返回none。有人可以帮助我吗

x = [[1, 2, 3],
     [2, 3, 4],
      [3, 4, 1]]

def rows(matrix):
    list = [val for val in matrix]
    list1 = [i for i in zip(*matrix)]
    if list == list1:
        return True
    else:
        return False

rows(x)

4 个答案:

答案 0 :(得分:2)

zip返回元组,而不是列表:

>>> [val for val in x]
[[1, 2, 3], [2, 3, 4], [3, 4, 1]]
>>> [i for i in zip(*x)]
[(1, 2, 3), (2, 3, 4), (3, 4, 1)]

他们不相同,相互比较:

>>> [1,2,3] == (1,2,3)
False

相反,您只需在转换为列表后返回比较结果:

>>> x == [list(i) for i in zip(*x)]
True

答案 1 :(得分:2)

使用map将子列表映射到元组并进行比较,映射到tuple shoud也比将元组更改为列表更有效:

def rows(matrix):
    return zip(*matrix) == map(tuple, matrix)

答案 2 :(得分:1)

zip函数返回元组列表:

>>> x = [[1, 2, 3],
         [2, 3, 4],
         [3, 4, 1]]
>>> zip(*x)
[(1, 2, 3), (2, 3, 4), (3, 4, 1)]
>>> x == zip(*x)
False

列表不等于元组,即使它具有相同的元素。即使内部列表/元组包含相同的元素,列表列表也不等于元组列表。你可以轻松地做你想做的事,你就近了!

>>> x == [list(i) for i in zip(*x)]
True

答案 3 :(得分:0)

您可以通过以下方式了解程序的错误:

x = [[1, 2, 3],[2, 3, 4],[3, 4, 1]]

def rows(matrix):
    list = [val for val in matrix]
    list1 = [i for i in zip(*matrix)]
    print list
    print list1
    if list == list1:
        return True
    else:
        return False

print rows(x)

此处print list打印列表列表,而print list1打印列表列表。

由于liststouples不同,程序会返回False