我正在尝试让程序查看多个列表,以查看这些列表中是否有多个整数。我收到了关于我要求完成该任务的上一个问题的答案。然而,这个问题出现了问题,我无法弄清楚它是什么。
以下是代码:
def all_num_in_list(d, numbers):
for n in numbers:
if n not in d:
return False
return True
def all_num_in_any_list(lists, numbers):
for d in lists:
if all_num_in_list(d, numbers):
return True
return False
while a:
try:
for c, row in enumerate(matrix):
if 0 in row:
print("Found 0 on row:", c, "index:", row.index(0))
if 1 not in row:
if all(row[row.index(0)] != 1 for row in matrix):
if all_num_in_any_list([2, 3, 4, 5, 6, 7, 8, 9], [row, box1, all(row[row.index(0)])]):
if all(row[row.index(0)] != 1 for row in matrix):
print ("t")
它绘制的错误是:
if all_num_in_any_list([2, 3, 4, 5, 6, 7, 8, 9], [row, box1, all(row[row.index(0)])]):
TypeError: 'int' object is not iterable
为什么会发生这种情况,如何避免,以及这段代码究竟在做什么?
由于
答案 0 :(得分:2)
all_num_in_any_list的第一个参数[2,3,4,5,6,7,8,9]是单个列表,而不是 列表清单。当你遍历它时,d是1,然后d是2,依此类推。什么时候 你将d作为第一个参数传递给all_num_in_list,它试图将它作为一个列表对待,即使它是一个整数。
答案 1 :(得分:2)
以下是您的矩阵,来自之前的问题
matrix = [
[0, 0, 0, 5, 0, 0, 0, 0, 6],
[8, 0, 0, 0, 4, 7, 5, 0, 3],
[0, 5, 0, 0, 0, 3, 0, 0, 0],
[0, 7, 0, 8, 0, 0, 0, 0, 9],
[0, 0, 0, 0, 1, 0, 0, 0, 0],
[9, 0, 0, 0, 0, 4, 0, 2, 0],
[0, 0, 0, 9, 0, 0, 0, 1, 0],
[7, 0, 8, 3, 2, 0, 0, 0, 5],
[3, 0, 0, 0, 0, 8, 0, 0, 0],
]
以下是方法:
def all_num_in_list(d, numbers):
for n in numbers:
if n not in d:
return False
return True
def all_num_in_any_list(lists, numbers):
for d in lists:
if all_num_in_list(d, numbers):
return True
return False
由于你在之前的一个问题中使用数字3,5和6作为例子来看,下面是你如何检查这些数字是否在上面的矩阵中:
all_num_in_any_list(matrix, [3, 5, 6])
这将返回False
,因为列表列表中的所有列表都不会包含所有这些树编号,例如:
all_num_in_any_list(matrix, [0, 1, 9])
将返回True,因为有一个包含这些数字的列表。
答案 2 :(得分:0)
all_num_in_any_list从列表中提取元素,在本例中是全部整数;然后,它将每个整数传递给all_num_in_list,而不是期望列表。
答案 3 :(得分:0)
此代码中的语句for n in numbers
导致问题
def all_num_in_list(d, numbers):
for n in numbers:
if n not in d:
return False
return True
Partial Traceback是
if n not in d
def all_num_in_list(d, numbers):
def all_num_in_any_list(lists, numbers):
if all_num_in_any_list([2, 3, 4, 5, 6, 7, 8, 9], [row, box1, all(row[row.index(0)])]):
TypeError: 'int' object is not iterable
因此,在函数all_num_in_any_list
中,您已经在列表for d in lists
上迭代lists
以获取传递给all_num_in_list
的整数。但是,在尝试将n
与原子d
进行比较时,就是错误发生的地方。
想一想?
您是否打算进行整数比较,例如n != d
而不是if n not in d
。
注意:::下次请发布完整追溯