2013-07-02 4 views
4

Я просмотрел другие ответы, но похоже, что они используют 2 разных значения.Получение значения ошибки «слишком много значений для распаковки»

Код:

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' 

Так в основном, это необходимо для вывода:

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

Но вместо этого, я получаю эту ошибку:

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 

Насколько я знаю как пользователь, так и диапазон (len (пользователь)) имеют одинаковую ценность.

+3

Кроме того: если вам действительно нужен список и его индексы, попробуйте: 'для g, u в перечислении (пользователь):'. Но, как говорили другие, в этом случае вы ** не хотите индексов, вы хотите 'zip'. –

ответ

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

фактически эквивалентно:

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

т.е. кортеж. Сначала он возвращает список user, а затем range. Поскольку количество элементов, присутствующих в user, равно 3, а на LHS у вас всего две переменные (u, b), поэтому вы получите эту ошибку.

>>> 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 

Вы ищете zip здесь (и использование строки форматирования вместо ручного конкатенации):

>>> 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 | 
+2

zip, zip, zip! Большое спасибо. – user2374668

+1

+1 для того, чтобы не использовать этот уродливый 'диапазон (len (user))' contraption! –

2
for u in user: 
    print '|',u,'|',info[user.index(u)][0],'|',info[user.index(u)][1],'|',info[user.index(u)][2],'| \n' 
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 | 
0

Следующий код тоже работает:

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

    print i[0],'|', 

    for x in i[1]: 

     print x,'|', 

    print 

И я получаю вывод:

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

P.S.:I знаю, что было несколько ответов, но я просто подумал, что это также способ, чтобы получить результат, и вот почему я добавил его!

Смежные вопросы