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

for循环遍历两个列表失败—— ValueError: too many values to unpack

  • for循环遍历两个列表失败—— ValueError: too many values to unpack
    • 问题来源:
    • 为啥会报错?
    • 我们到底该如何处理两个列表的for循环呢?

问题来源:

我现在有两个列表,一个是标题,一个是访问量,我想在一个for循环中,获取这两个列表中同一位置的值,然后打印出来,记得好像之前看过Python的for可以迭代两个列表,所以我就写了下面的代码:

# 两个列表大概的内容是——
# self.view_list = ["12","15"]
# self.title_list = ["我是标题a","我就是标题b"]
for v,t in self.view_list,self.title_list:
     print "----------***----------\n题目: 《%s》\n浏览量: %s"%(t,v)

然后报错为:
ValueError: too many values to unpack

咋回事儿?

我做了什么?直接搜这个报错,好像并没有什么有价值的信息,我搜了一下
for循环遍历两个列表
so,找到了下面的例子:
参考链接:
python的for循环同时遍历两个list?

为啥会报错?

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

for i, j in b, c:

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

for i, j in b, c:

相当于:

for i, j in (b, c):

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

你可能感兴趣的:(错误解决,教程,Python,学习笔记,爬取CSDN教程系列)