2016-10-03 45 views
0
Cols = [(10,11),(8,9),(6,7),(4,5),(2,3),(0,1)] 
Index = [1,2,3,4,5,6] 
Temp = ['RT','85C','125C','175C','220C','260C'] 


for i,c,t in Index, Cols, Temp: 
    print(i,c,t) 

我希望將i作爲元組,c作爲整數,t作爲字符串。當我嘗試了上面我不斷收到一個:用於元組和數組的循環的多變量

ValueError異常:值過多解壓(預計3)

,所以我嘗試以下,通過其他的解決方案建議:

x = [[(10,11),(8,9),(6,7),(4,5),(2,3),(0,1)], [1,2,3,4,5,6], ['RT','85C','125C','175C','220C','260C']] 

for c,i,t in x: 
    print(i,c,t) 

,但得到同樣的錯誤也是如此。以下是我希望得到的是:

First loop: 
i = 1 
c = (10,11) 
t = 'RT' 

Second loop: 
i = 2 
c = (8,9) 
t = '85C' 
. 
. 
. 
. 
+0

考慮使用'枚舉'而不是使用索引列表。 – erip

回答

3

您需要使用zip功能通過您的列表元素方面

for i,c,t in zip(Index, Cols, Temp): 
    print(i,c,t) 

輸出

1 (10, 11) RT 
2 (8, 9) 85C 
3 (6, 7) 125C 
4 (4, 5) 175C 
5 (2, 3) 220C 
6 (0, 1) 260C 
2

所有你需要的是迭代a zip()

Cols = [(10,11),(8,9),(6,7),(4,5),(2,3),(0,1)] 
Index = [1,2,3,4,5,6] 
Temp = ['RT','85C','125C','175C','220C','260C'] 


for i,c,t in zip(Index, Cols, Temp): 
    print(i,c,t) 
3

you can do like this

Cols = [(10,11),(8,9),(6,7),(4,5),(2,3),(0,1)] 
Index = [1,2,3,4,5,6] 
Temp = ['RT','85C','125C','175C','220C','260C'] 
loops_value = ['First','Second','Third','Fourth','Fifth','Sixth'] 

for j, i, c, t in zip(loops_value, Index, Cols, Temp): 
    print "%s loop" % j 
    print 'i = ', i 
    print 'j = ', c 
    print 'k = ', t 
2

基本上,for語句逐個遍歷內容,所以在每次迭代中,有一個值是可用的。

當使用

for i,c,t in Index, Cols, Temp: 

你想一個數值解壓縮到三個變量,這就是爲什麼你越來越值過多解壓ValueError異常。既然你似乎想用三個不同的列表單迭代,存在可用於此目的的函數zip(),izip()和izip_longest()。

zip()返回一個元組列表,其中第i個元組包含每個作爲參數傳遞給zip()的列表中的第i個元素。 返回的列表的長度被截斷爲傳遞列表的長度。

for i,c,t in zip(Index, Cols, Temp): 
     print i,c,t 

izip()按拉鍊()基本相同,但它返回一個迭代器,可以一次遍歷和他們快,比ZIP()單遍歷。

from itertools import izip 
    for i,c,t in izip(Index, Cols, Temp): 
      print i,c,t 

izip_longest()既是壓縮工作相同()和izip(),但它的幫助時,如果iterables是不均勻的長度,遺漏值是無默認,但可更新按要求。

from itertools import izip_longest 
    for i,c,t in izip_longest(Index, Cols, Temp,fillvalue= 0): 
     print i,c,t 

fillvalue參數是缺少的值,即0,如果迭代的長度不均勻。

希望它有幫助。 :)