2017-10-14 8 views
0

J'ai une liste contenant des tuples. Chaque ligne contient 2 éléments. J'ai essayé d'imprimer avec le code suivant, mais il affiche le message d'erreur:Itirating à travers la liste des tuples avec des boucles imbriquées

TypeError: list indices must be integers or slices, not tuple

Code pertinent:

for i in list: 
    for j in [1, 2]: 
     print(list[i][j]) 

Avec l'idée d'imprimer chaque élément du 1er tuple, chaque élément de la 2e ligne etc

+0

Comme @ dit Miraj50, 'I' est déjà un tuple. Il suffit de se débarrasser de la boucle imbriquée et de faire 'print (i [0], i [1])' sur le premier. –

Répondre

2

Réaliser i dans la boucle est en fait un tuple (un élément d'une liste). Donc, vous avez juste besoin d'imprimer l'élément de i comme i[j]. list[i] n'a aucun sens car i devrait être un entier, mais c'est en fait un élément de la liste, c'est un tuple. Vous devez également obtenir une erreur comme celle-ci TypeError: list indices must be integers, not tuple. Et bien je le suis. Donc cela devrait être un indice/une explication pour vous.

lst = [(1,2),(5,9)] 
for i in lst: 
    for j in [0, 1]: 
     print(i[j]) 
    print 

Sortie:

1 2 
5 9 
+0

Essayez de ne pas utiliser le nom de variable 'list' pour l'affectation, utilisez soit' list_' ou renommez-le complètement. Vous ne devriez pas assigner quoi que ce soit aux noms stdlib –

+0

op, bon timing :). Supprimez également la virgule après 'i [j]' et mettez des parenthèses autour de 'print's et votre code sera compatible et fonctionnera :) –

+0

vous avez oublié les parenthèses sur la deuxième déclaration d'impression :) –

0

Vous pouvez utiliser la compréhension de la liste imbriquée:

[i for subset in list for i in subset] give you flat list 

Il est plus pythonique!

0

Vous pouvez déballer le tuple dans la boucle

>>> tup_list = [(1,2), (3,4)] 
>>> for a,b in tup_list: 
...  print(a,b) 
... 
1 2 
3 4