我是一个Python新手,并试图编写代码来检查嵌套列表是否有一组有效的数字。每行和每列必须有效。我编写了一个名为check_sequence的函数,它验证列表是否具有有效的数字集。我如何从另一个函数调用该函数来检查该行是否有效?所以例如,我需要这样的东西用于check_rows:
check_sequence(list):
checks if list is valid
check_rows(list):
For each of the rows in the nested list call check_sequence
这是check_sequence的代码:
def check_sequence(mylist):
pos = 0
sequence_counter = 1
while pos < len(mylist):
print "The pos is: " + " " + str(pos)
print "The sequence_counter is:" + " " + str(sequence_counter)
for number in mylist:
print "The number is:" + " " + str(number)
if number == sequence_counter:
sequence_counter = sequence_counter + 1
pos = pos + 1
break
else:
# if list is at the last position on the last item
if sequence_counter not in mylist:
print "The pos is:" + " " + str(pos) + " and the last position is:" + " " + str(mylist[len(mylist) - 1])
print "False"
return False
print "True"
return True
所以我打电话给下面的主要方法:
check_square([[1, 2, 3],
[2, 3, 1],
[3, 1, 2]])
def check_square(list):
if check_rows() and check_columns() == True:
return True
else:
return False
答案 0 :(得分:1)
您是否正在寻找循环迭代?
check_sequence(list):
#your check here
check_rows(list):
for row in list:
if not check_sequence(row):
return False
return True
答案 1 :(得分:1)
鉴于嵌套列表是面向行的(行是最低维度),您可以简单地使用:
check_rows(list):
return all(check_sequence(sublist) for sublist in list)
这里我们使用all(..)
内置:当且仅当生成器(粗体部分)为{{1}的所有元素的真实性时,它才会计算为True
},否则结果为True
。因此,从其中一行无效的那一刻起,矩阵无效。
另一方面,如果嵌套列表是面向列的(列是最低维度),我们首先需要使用{{1}进行转置 }:
False
zip
转置check_rows(list):
return all(check_sequence(list(sublist)) for sublist in zip(*list))
,我们使用zip(*..)
确保list
仍在使用列表(如果任何可迭代就足够了,list(..)
} part可以省略。
答案 2 :(得分:1)
这是一个适用于任意2D列表的解决方案。
l = [[1,2,3],[1,2],[1,4,5,6,7]]
try:
if len([1 for x in reduce(lambda x, y :x + y, l) if type(x) != type(0)]) > 0:
raise Exception
catch Exception:
pass # error, do something
直觉是将列表展平,然后连续检查其类型是否为int
。
答案 3 :(得分:1)
你必须将两个函数分开,并认为第一个函数将返回对另一个函数的每个值的完整检查:
def check_sequence(lis):
ret = True
for row in lis:
ret = ret and check_rows(row)
return ret
def check_rows(row):
ret = True
for elem in row:
pass #do your checking
return ret
一个具体的例子可能是:
l = [[1,2,3],[1,2],[1,4,5,6,7]]
def check_sequence(lis):
ret = True
for row in lis:
ret = ret and check_rows(row)
return ret
def check_rows(row):
return 1 in row #ask if 1 belongs to the list
check_sequence(l) ---> True
check_sequence([[1],[2,3]]) ---> False