2016-10-03 48 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,如果迭代的长度不均匀。

希望它有帮助。 :)