无法理解简单的错误消息

时间:2014-12-05 12:33:55

标签: python list int

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

    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

3 个答案:

答案 0 :(得分:5)

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

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

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

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

无论如何,编写所需代码的方式可能更简单,更清晰。但是从目前的代码来看,很难知道预期的内容(并且可能应该单独提出一个问题)。

答案 1 :(得分:2)

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

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

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

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

Btw范围始终从零开始,因此您可以节省一些打字并改为使用range(len(...))

答案 2 :(得分:0)

如果需要,您可以使用zip

检查一下:Better way to iterate over two or multiple lists at once

如果您有两组数据。

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