2017-04-09 1 views
2

Je n'arrive pas à comprendre pourquoi les éléments suivants ne peuvent pas être décompactés dans la ligne d'en-tête d'une boucle for.Décompresser une structure de séquence en utilisant une instruction de boucle `for` en Python

Étant donné que:

>>> (a,b),c = (1,2),3 
>>> a 
1 
>>> b 
2 
>>> c 
3 

Pourquoi quand je le fais alors que je reçois une erreur ?:

for (a,b),c in [(1,2),3]: 
... print(a,b,c) 

Je suis conscient de la façon de le faire fonctionner, comme ce qui suit me donne la résultat désiré:

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

Mais pourquoi une parenthèse supplémentaire entoure-t-elle l'objet original dans la ligne d'en-tête de for boucle nécessaire pour atteindre cette sortie? Etant donné que toute séquence peut être décompressée, [(1,2), 3] est syntaxiquement correcte en tant que séquence de liste et devrait théoriquement pouvoir être affectée aux variables cibles (a,b),c. Alors pourquoi n'est-ce pas le cas et pourquoi dois-je joindre la séquence avec une parenthèse supplémentaire?

Une certaine clarté autour de ceci serait grandement appréciée.

Répondre

4

La boucle for effectue une itération sur les entrées de la liste, donc la première fois, elle essaie d'affecter (1,2) à (a,b),c, ce qui ne fonctionnera pas. L'ajout des parenthèses supplémentaires convertit (1,2),3 en un n-uplet qui est une entrée de liste unique ((1,2),3) à attribuer à (a,b),c la première fois que la boucle for itère, ce qui fonctionne.

Essayez:

for v in [(1,2),3]: 
    print v 

Et vous verrez que v est affecté (1,2), puis 3.

+0

Une réponse claire et concise, merci! – seeker