TypeError:类型为'int'的参数不可迭代

时间:2011-12-30 01:15:20

标签: python

我运行程序时遇到此错误,我不明白为什么。错误发生在说“如果1不在c:”

的行上

代码:

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],
    ]
a = 1
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 c:
                    print ("t")
    except ValueError:
         break

我想知道的是我如何通过正常运行来解决这个错误。

提前致谢!

6 个答案:

答案 0 :(得分:12)

此处c是您正在搜索的列表中的索引。由于您无法遍历整数,因此您将收到该错误。



>>> myList = ['a','b','c','d']
>>> for c,element in enumerate(myList):
...     print c,element
... 
0 a
1 b
2 c
3 d

您正试图检查1是否在c,这是没有意义的

答案 1 :(得分:2)

基于OP的评论It should print "t" if there is a 0 in a row and there is not a 1 in the row.

if 1 not in c更改为if 1 not in row

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: #change here
            print ("t")

进一步澄清:row变量本身包含一行,即[0, 5, 0, 0, 0, 3, 0, 0, 0]c变量保存的索引行。即,如果row保持矩阵中的第3行c = 2。请记住,c从零开始,即第一行位于索引0,第二行位于索引1等。

答案 2 :(得分:1)

c是行号,因此它是int。因此,数字不能是in其他数字。

答案 3 :(得分:1)

你试图迭代'c',它只是一个整数,保留你的行号。

  

如果连续0,则应打印“t”

然后只需用行替换c就可以了:

if 1 not in row:

答案 4 :(得分:0)

我认为您希望if 1 != c: - 测试c是否没有值1

答案 5 :(得分:0)

好吧,如果我们仔细观察该错误,它表示我们正在迭代一个不可迭代的对象。 基本上,我的意思是,如果我们写'x' in 1,它将抛出错误。如果我们写'x' in [1],它将返回False

>>> 'x' in 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: argument of type 'int' is not iterable

>>> 'x' in [1]
False

因此,在遇到此错误的情况下,我们需要做的就是使该项目可迭代。在这个问题中,我们可以使c由列表[c]来解决此错误。 if 1 not in [c]: