1

以下代码给了我错误Python

TypeError: 'int' object is not iterable:

代码:

hosts = 2
AppendMat = []
Mat = np.zeros((hosts,hosts))
Mat[1][0] = 5
for i in hosts:
    for j in hosts:
        if Mat[i][j]>0 and Timer[i][j]>=5:
            AppendMat.append(i)

我该如何解决错误-

TypeError: 'int' object is not iterable?

其次,如果 if 条件为真,我如何附加 i 和 j 的值?在这里,我试图仅附加 i 。

4

6 回答 6

3

尝试这个:

for i in xrange(hosts):
于 2013-09-03T15:10:49.227 回答
3

您需要迭代基于 的范围hosts,而不是hosts自身:

for i in range(hosts):      # Numbers 0 through hosts-1
    for j in range(hosts):  # Numbers 0 through hosts-1

您可以将两个数字附加为元组:

 AppendMat.append((i,j))

或者只是单独附加它们

AppendMat.extend([i,j])

取决于你的需要。

于 2013-09-03T15:11:14.830 回答
1

hosts是一个int,所以for i in hosts不会起作用,正如错误所解释的那样。也许你的意思是

for i in range(hosts):

第二个循环也是如此for

(参见range(); 在 Python 2.x 中使用xrange()


顺便说一句,这整个事情可以是一个单一的列表理解

AppendMat = [i for i in range(hosts) 
                   for j in range(hosts) 
                       if Mat[i][j]>0 and Timer[i][j]>=5]
于 2013-09-03T15:11:06.247 回答
1

您不能迭代整数 ( hosts):

>>> for i in 2:
...     print(i)
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable

您应该使用range(n)迭代n时间:

>>> for i in range(2):
...     print(i)
...
0
1
于 2013-09-03T15:11:09.857 回答
1

可能你的意思是 range(2) 而不是hosts

于 2013-09-03T15:11:53.437 回答
1

for语句适用于 Python 概念“可迭代”,如列表、元组等。 int 不是可迭代的。

所以你应该使用range()or xrange(),它接收一个 int 并产生一个可迭代的。

第二,你的意思是附加一个元组:append((i,j))还是一个列表:append([i,j])?我不太清楚这个问题。

于 2013-09-03T15:21:33.890 回答