获得“too many values to unpack”值错误

4

我看了其他答案,但是它们似乎使用了两个不同的值。

代码:

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(user))的值是相等的。

3
附注:如果你真的想要一个列表及其索引,可以尝试:for g,u in enumerate(user):。但是,正如其他人所说,在这种情况下,你不需要索引,你需要使用zip - Robᵩ
4个回答

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

实际上等价于:

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

即元组。它首先返回user列表,然后是range。由于user中有3个项目,在左侧只有两个变量(ub),因此你会得到那个错误。

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

附言:我知道已经有几个答案了,但我认为这也是一种获取结果的方式,所以我添加了它!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接