我想检查第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)
答案 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
打印列表列表。
由于lists
和touples
不同,程序会返回False
。