我现在有两个列表,一个是标题,一个是访问量,我想在一个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)
也就是说能顺利迭代,是恰巧,而且并不一定能合理的取出你想要的顺序!
回到你的需求,若要平行迭代兩個 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,基本上就这样了