【问题标题】:Multi-variable for loop with a tuple and a array带有元组和数组的多变量 for 循环
【发布时间】:2016-10-03 12:08:40
【问题描述】:
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'
.
.
.
.

【问题讨论】:

  • 考虑使用enumerate,而不是使用索引列表。

标签: python python-3.x jupyter-notebook


【解决方案1】:

您需要使用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】:

    你可以这样做

    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
    

    【讨论】:

      【解决方案3】:

      您只需要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)
      

      【讨论】:

        【解决方案4】:

        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() 的工作方式相同,但它返回一个迭代器,并且可以遍历一次,与单次遍历的 zip() 相比,它们的速度更快。

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

        izip_longest() 与 zip() 和 izip() 的工作方式相同,但如果迭代长度不均匀,缺失值默认为 None,但可以根据需要更新。

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

        如果可迭代的长度不均匀,则 fillvalue 参数是缺失值,即 0。

        希望对您有所帮助。 :)

        【讨论】:

          猜你喜欢
          • 2014-02-05
          • 2014-06-12
          • 2016-05-26
          • 1970-01-01
          • 2014-12-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多