我运行程序时遇到此错误,我不明白为什么。错误发生在说“如果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
我想知道的是我如何通过正常运行来解决这个错误。
提前致谢!
答案 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]: