Python新手在这里。我正在验证正方形中的行和列,由嵌套列表表示,如下所示:
[[1,2,3],
[2,3,1]
[3,1,2]]
如果行和列仅出现1到n次,则它们有效。因此,例如,如果嵌套列表的长度为3,那么数字1,2和3应该在所有行中出现一次,在所有列中出现一次,以使其有效。我检查行并了解其工作原理。下面我定义了一个名为check_sequence的方法,它检查列表中的数字1到n是否只出现一次,get_rows方法获取列表中的所有行并检查check_sequence:
def check_sequence(mylist):
for x in range(1, len(mylist)+1):
print "x:" + ' ' + str(x)
if x not in mylist:
print "False"
return False
else:
print "True"
def check_row(mylist):
for row in mylist:
print row
if check_sequence(row) is False:
print "This is False"
return False
print "This is True"
return True
我不明白的是如何使用for循环检查方块中的列。例如,如果我们有与上面相同的方格:
[[1,2,3],
[2,3,1]
[3,1,2]]
第一列包含1,2和3,第二列包含2,3和1.我对如何在一列中收集这些数字并根据我的方法check_sequence检查它感到困惑? / p>
答案 0 :(得分:0)
为了获取列表列表的 i
-th列,您可以使用 list comprehension :
column_i = [ row[i] for row in matrix ]
那么你的检查代码应该是:
def check_row(mylist):
for row in mylist:
print row
if check_sequence(row) is False:
print "This is False"
return False
for i in len(mylist):
print row
if check_sequence([ row[i] for row in mylist ]) is False:
print "This is False"
return False
print "This is True"
return True
尽管如此,您还可以使用zip(..)
将列表列表转换为元组列表:
def check_row(mylist):
for row in mylist:
print row
if check_sequence(row) is False:
print "This is False"
return False
for col in zip(*mylist):
print col
if check_sequence(col) is False:
print "This is False"
return False
print "This is True"
return True