Ottenere un "troppi valori per decomprimere" errore di valore

voti
4

Ho guardato altre risposte, ma sembra che usano 2 valori differenti.

Il codice:

user = ['X', 'Y', 'Z']
info = [['a','b','c',], ['d','e','f'], ['g','h','i']]

for u, g in user, range(len(user)):
    print '|',u,'|',info[g][0],'|',info[g][1],'|',info[g][2],'| \n'

Quindi, fondamentalmente, ha bisogno di uscita:

'| X | a | b | c |'
'| Y | d | e | f |'
'| z | g | h | i |'

Ma invece, ottengo questo errore:

Traceback (most recent call last):
  File <pyshell#19>, line 1, in <module>
    for u, g in user, range(len(user)):
ValueError: too many values to unpack

Per quanto ne so sia l'utente e la gamma (len (utente)) sono di uguale valore.

È pubblicato 02/07/2013 alle 12:56
dall'utente
In altre lingue...                            


4 risposte

voti
14
for u,g  in user, range(len(user)):

in realtà è equivalente a:

for u,g  in (user, range(len(user))):

cioè una tupla. Esso restituisce la prima userlista e poi range. Poiché il numero di elementi presenti nel usersono 3e LHS hai appena due variabili ( u, b), in modo che si vuole ottenere tale errore.

>>> u,g = user
Traceback (most recent call last):
  File "<ipython-input-162-022ea4a14c62>", line 1, in <module>
    u,g = user
ValueError: too many values to unpack

Siete alla ricerca di zipqui (e utilizzare la formattazione delle stringhe invece di concatenazione manuale):

>>> user = ['X', 'Y', 'Z']
>>> info = [['a','b','c',], ['d','e','f'], ['g','h','i']]
for u, g in zip(user, info):
    print "| {} | {} |".format(u," | ".join(g))
...     
| X | a | b | c |
| Y | d | e | f |
| Z | g | h | i |
Risposto il 02/07/2013 a 12:58
fonte dall'utente

voti
2
for u in user:
    print '|',u,'|',info[user.index(u)][0],'|',info[user.index(u)][1],'|',info[user.index(u)][2],'| \n'
Risposto il 03/07/2013 a 03:52
fonte dall'utente

voti
1
>>> g = 0
>>> for u in user:
...     print '|',u,'|',info[g][0],'|',info[g][1],'|',info[g][2],'| \n'
...     g=g+1
... 
| X | a | b | c | 

| Y | d | e | f | 

| Z | g | h | i | 
Risposto il 03/07/2013 a 03:54
fonte dall'utente

voti
0

Il seguente codice funziona anche:

>>> for i in zip(user,info):

    print i[0],'|',

    for x in i[1]:

        print x,'|',

    print

E ho l'output:

X | a | b | c |
Y | d | e | f |
Z | g | h | i |

PS: Io non vi conosco sono stati un paio di risposte, ma ho solo pensato che questo è anche un modo per ottenere il risultato e questo è il motivo per cui ho aggiunto!

Risposto il 03/07/2013 a 04:05
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more