【问题标题】:Failing to understand simple error message无法理解简单的错误信息
【发布时间】:2015-02-03 15:07:03
【问题描述】:

我已经定义了一个如下的函数来尝试在两组数据之间进行插值。当我运行它时,我收到消息:

    for i, j in range(0, len(wavelength)):
TypeError: 'int' object is not iterable

我不确定我做错了什么。诚然,我不是很擅长这个。

def accountforfilter(wavelength, flux, filterwavelength, throughput):
    filteredwavelength=[]
    filteredflux=[]

    for i in range(0, len(wavelength)):
        if wavelength[i] in filterwavelength[j]:
            j=filterwavelength.index(wavelength[i])
            filteredwavelength.append(wavelength[i])
            filteredflux.append(flux[i]*throughput[j])

        elif wavelength[i]<filterwavelength[j]<wavelength[i+1]:
            m=((throughput[j+1]-throughput[j])/(filterwavelength[j+1]-filterwavelength[j])
            c=throughput[j]-(m*(wavelength[i]))
            filteredwavelength.append(wavelength[i])
            filteredflux.append(flux[i]*(m*wavelength[i]+c)

    return filteredwavelength, filteredflux

【问题讨论】:

标签: python list int


【解决方案1】:

问题是该范围只适用于一个变量,如下所示:

for i in range(0, len(wavelength))

您尝试一次使用两个变量,因此 python 尝试解包一个不可能的整数。你应该使用上面的。如果您需要两个独立的索引,请使用

for i in range(0, len(...))
  for j in range(0, len(...))

顺便说一句,范围总是从零开始,这样您就可以省去一些输入,而改用range(len(...))

【讨论】:

    【解决方案2】:

    如果需要,您可以使用zip

    检查这个:Better way to iterate over two or multiple lists at once

    如果你有两组数据。

    for i,j in zip(set1,set2):
    print i,j
    

    【讨论】:

      【解决方案3】:

      range() 返回一个整数列表。通过使用for i,j in range(),您告诉Python 将range() 中的每个项目解压缩为两个值。但由于这些值是整数,它们是单个数据,因此不可迭代,因此您会收到错误消息。

      您的代码看起来也有点奇怪。 起初,您似乎想遍历波长/滤波器波长的所有组合,这与

      for i in range(len(wavelength)):
          for j in range(len(filterwavelength)):
               do_stuff()
      

      但是你正在修改循环体内的j参数,我不明白。

      无论如何,编写您想要的代码的方法可能更简单、更清晰。但是从当前的代码中很难知道预期是什么(可能应该放在一个单独的问题中)。

      【讨论】:

      • 因此,如果我用两个 if 语句替换该行,一个用于 i,一个用于 j,那会起作用吗?
      • @NXW 这取决于,你想让ij 成为什么?你可以使用例如for i, j in itertools.product(range(len(wavelenth)), repeat=2)(见here)。
      猜你喜欢
      • 2023-03-13
      • 2021-12-27
      • 1970-01-01
      • 2012-06-29
      • 2017-09-12
      • 1970-01-01
      • 2016-08-11
      • 1970-01-01
      • 2011-07-06
      相关资源
      最近更新 更多