Python遍历多个列表:ValueError: too many values to unpack (expected 2)

项目场景:

在进行列表遍历的时候,希望同时遍历多个列表。


问题描述:

      在使用循环遍历两个列表时,希望x,y各自获取到数组a,b里全部的元素,却产生了意料之外的报错

ValueError: too many values to unpack (expected 2)

让我们来看看代码

a = [1,2,3]
b = [5,6,7]

for x,y in a,b:
    print("x:",x,"y:",y)

'''
ValueError: too many values to unpack (expected 2)
'''

解决方案:

      观察报错,说给予的值太多了,期望的是两个。而我们哪里有超过两个的值呢?肯定不可能是x,y这边出的问题,那就只有可能是a,b里的值太多了。尝试去调试一下

a = [1,2]
b = [5,6]

for x,y in a,b:
    print("x:",x,"y:",y)

      不出所料跑通了,但是问题又出现了,他的遍历方式好像与我们期望的不同,他好像是一个纵向的遍历。

x: 1 y: 2
x: 5 y: 6

Process finished with exit code 0

      如果确实是纵向的遍历那问题就能说得通了,如果列表的列数多于变量数了,那多的那几列就没有变量去遍历了,那也满足了所谓的too many values to unpack,可这毕竟只是猜想,让我们证实一下。

#第一步:通过增加遍历的变量来证明
a = [1,2]
b = [5,6]

for x,y,z in a,b:
    print("x:",x,"y:",y)
#报错:
#ValueError: not enough values to unpack (expected 3, got 2)
#符合猜想
#第二步:扩充被遍历的列表
a = [1,2,3]
b = [5,6,7]
c = [8,9,10]
for x,y,z in a,b,c:
    print("x:",x,"y:",y,"z:",z)
    
'''
输出:
x: 1 y: 2 z: 3
x: 5 y: 6 z: 7
x: 8 y: 9 z: 10

Process finished with exit code 0
符合猜想
'''

思考

      虽然我们通过实验搞清了原理,但只是解决了报错,真正的想实现我们预想的迭代方式该怎么做呢?
      其实python里面的字典键值对的形式就能很好的解决这个问题。

a = [1,2,3,4]
b = [5,6,7,8]

t = dict(zip(a,b))
for x,y in t.items():
    print("x:",x,"y:",y)

'''
x: 1 y: 5
x: 2 y: 6
x: 3 y: 7
x: 4 y: 8

Process finished with exit code 0
'''

你可能感兴趣的:(错误调试,python,debug)