【python學習筆記】for迴圈遍歷兩個列表失敗—— ValueError: too many values to unpack
阿新 • • 發佈:2019-02-08
for迴圈遍歷兩個列表失敗—— ValueError: too many values to unpack
問題來源:
我現在有兩個列表,一個是標題,一個是訪問量,我想在一個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,基本上就這樣了