2013-09-03 1 views
1

Le code suivant est de donner moi error PythonPython TypeError: objet 'int' est pas itérables

TypeError: 'int' object is not iterable:

code:

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) 

Comment pourrais-je corriger l'erreur -

TypeError: 'int' object is not iterable? 

Deuxièmement, comment puis-je ajouter à la fois les valeurs de i et j si la condition if est vraie ? Ici, je suis en train d'essayer d'ajouter seulement moi.

+4

'pour i dans la plage (hosts): pour j dans la plage (hosts)'? –

Répondre

2

Essayez ceci:

for i in xrange(hosts): 
1

hosts est un int, donc for i in hosts ne fonctionnera pas, comme l'erreur explique. Peut-être que vous vouliez dire

for i in range(hosts): 

La même chose vaut pour le second for -loop.

(Voir range(), en cours d'utilisation de Python 2.x xrange())


D'ailleurs tout cela peut être un seul list comprehension:

AppendMat = [i for i in range(hosts) 
        for j in range(hosts) 
         if Mat[i][j]>0 and Timer[i][j]>=5] 
+1

bon usage de la compréhension de la liste. – Arpit

1

Vous ne pouvez pas itérer entier (hosts) :

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

Yo u devrait utiliser range(n) pour itérer n fois:

>>> for i in range(2): 
...  print(i) 
... 
0 
1 
3

Vous devez itérer sur une gamme basée sur hosts, non hosts lui-même:

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

Vous pouvez ajouter les deux nombres en tant que tuple:

AppendMat.append((i,j)) 

ou simplement les ajouter individuellement

AppendMat.extend([i,j]) 

en fonction de vos besoins.

1

probablement que vous vouliez dire plage (2) au lieu de hosts

1

la déclaration for appliquer au concept Python "itérables", comme la liste, tuple, etc .. Un int est pas un itérable. Vous devez donc utiliser range() ou xrange(), qui reçoivent un int et produisent un itérable.

Deuxièmement, voulez-vous dire ajouter un tuple: append((i,j)) ou une liste: append([i,j])? Je ne suis pas très clair sur la question.

Questions connexes