我正在尝试创建一个过程(对称(p)),该过程将一个列表作为输入,该列表必须是像Sudoku游戏一样的方形,并且其组件也是列表,并输出值true或false if “正方形”是对称的还是不对称的。
如果第一行等于第一列,第二行等同于第二列,则方形是对称的,依此类推。现在,我已经编写了代码,但它不起作用。它的输出始终为True。这是代码粘贴:
def column_building(list, position):
column = []
for i in list:
column.append(i[position])
return column
a = [[1, 2, 3],
[2, 3, 4],
[3, 4, 1]]
b = [["cat", "dog", "fish"],
["dog", "dog", "dog"],
["fish","fish","cat"]]
def symmetric(p):
counter = 0
for e in p:
if e == column_building(p, counter):
counter = counter + 1
return True
else:
return False
break
print symmetric(b)
在代码中,第一个过程告诉哪个列在确定的位置。 a
和b
是我创建用作示例的列表。并且,正如我所说,它输出始终为True,但如果我使用b
,当e
是列表的第二个元素时,它不等于使用第二个位置构建的列({{ 1}})。
答案 0 :(得分:2)
Python魔术!
def symmetric(p):
return list(map(list, zip(*p))) == p
在这里,zip(*p)
只是转置给定的列表列表。实际上,您需要检查transpose(p) == p
。
如果您使用的是Python 2.7,则可以移除对list
的外部调用。
答案 1 :(得分:0)
要修复(而不是替换)您的代码,我建议:
def symmetric(p):
counter = 0
for e in p:
if e != column_building(p, counter):
return False
counter += 1
return True
您在错误的时间返回True
和False
,因为问题比您制作的更简单。
答案 2 :(得分:0)
Numpy版本:
import numpy as np
b = [["cat", "dog", "fish"],
["dog", "dog", "dog"],
["fish","fish","cat"]]
np.all(np.array(b) == np.array(b).T) # all True = True, else False
答案 3 :(得分:-1)
我认为您需要检查transpose(p) == p