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,基本上就这样了