TypeError:'int'对象不可迭代

时间:2012-01-04 03:14:53

标签: python

我正在尝试让程序查看多个列表,以查看这些列表中是否有多个整数。我收到了关于我要求完成该任务的上一个问题的答案。然而,这个问题出现了问题,我无法弄清楚它是什么。

以下是代码:

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

为什么会发生这种情况,如何避免,以及这段代码究竟在做什么?

由于

4 个答案:

答案 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

注意:::下次请发布完整追溯