【python学习笔记】for循环遍历两个列表失败—— ValueError: too many values to unpack

b = [1, 2, 3]
c = [(10, 20), (30, 40), (50, 60)]

for i, j in b, c:
    print(i, j)
ValueError: too many values to unpack (expected 2)

 

咋回事儿?

资料中给了一个参考示例:
对于

当你写出 b, c 的時候, Python 會以為你要製造一個 tuple, 所以:

相当于:

當 b = [1, 2, 3] 且 c = [(10, 20), (30, 40), (50, 60)] 时就相当于:

for i, j in ([1, 2, 3], [(10, 20), (30, 40), (50, 60)]):

所以第一个迭代到的对象是[1,2,3],而这个list有三个元素自然无法拆解成两个变量i和j。

但如果 b = [1, 2] 且 c = [(10, 20), (30, 40)],则相当于:

for i, j in ([1, 2], [(10, 20), (30, 40)]):

第一个迭代到的对象是[1,2,],该list有两个元素恰能unpack为i和j,所以下面的语法时能够顺利运行的。

>>> b = [1, 2]
>>> c = [(10, 20), (30, 40)]
>>> for i,j in b,c:
...     print i
...     print j
...
1
2
(10, 20)
(30, 40)

也就是说能是恰巧!
我们到底该如何处理两个列表的for循环呢?

回到你的需求,若要平行迭代两个list,你需要的是 zip 或 zip_longest
好,我就来试试zip函数:

>>> b = [1,2]
>>> c = [(10,20),(30,40)]
>>> for i,j in zip(b,c):
...     print i
...     print j
...
1
(10, 20)
2
(30, 40)

可以看出>>> b = [1,2]
>>> c = [(10,20),(30,40)]
>>> for i,j in zip(b,c):
...     print i
...     print j
...
1
(10, 20)
2
(30, 40)

可以看出来,这个才算是一个一个的按每个列表的顺序,依次取出~
OK,基本上就这样了
 

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值