2017-08-18 5 views
1

Je suis tombé sur un problème de déballage que je ne peux pas expliquer.Comment décompresser une liste de tuples avec énumération?

Cela fonctionne:

tuples = [('Jhon', 1), ('Jane', 2)] 

for name, score in tuples: 
    ... 

Cela fonctionne également

for id, entry in enumerate(tuples): 
    name, score = entry 
    ... 

mais cela ne fonctionne pas:

for id, name, score in enumerate(tuples): 
    ... 

jetant un ValueError: need more than 2 values to unpack exeption.

Répondre

5

enumerate crée lui-même des tuples avec la valeur de liste et son index correspondant. Dans ce cas:

list(enumerate(tuples)) 

donne:

[(0, ('Jhon', 1)), (1, ('Jane', 2))] 

Pour déballer complètement vous pouvez essayer ceci:

for index, (name, id) in enumerate(tuples): 
    pass 

Ici, Python est éplucher l'objet d'index et tuple sur le côté droit avec les résultats sur le côté gauche, puis en attribuant.

3

Enveloppez name et score dans un tuple lors du déballage.

for id, (name, score) in enumerate(tuples): 
    print(id, name, score) 

# Output 
# (0, 'Jhon', 1) 
# (1, 'Jane', 2) 

énumération (chose), où chose est soit un itérateur ou une séquence, renvoie un itérateur qui retourne (0, chose [0]), (1, chose [1]), (2 , chose [2]), et ainsi de suite.

Dans ce cas, chose est un tuple.