Python 无法理解简单错误消息

Python 无法理解简单错误消息,python,list,int,Python,List,Int,我定义了一个函数,尝试在两组数据之间插值。当我运行它时,我会收到以下消息: for i, j in range(0, len(wavelength)): TypeError: 'int' object is not iterable 我不确定我做错了什么。诚然,我不太擅长这个 def accountforfilter(wavelength, flux, filterwavelength, throughput): filteredwavelength=[] filter

我定义了一个函数,尝试在两组数据之间插值。当我运行它时,我会收到以下消息:

    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
def accountforfilter(波长、通量、过滤器波长、吞吐量):
filteredwavelength=[]
filteredflux=[]
对于范围(0,len(波长))内的i:
如果滤波器波长[j]中的波长[i]:
j=滤波器波长指数(波长[i])
filteredwavelength.append(波长[i])
filteredflux.append(通量[i]*吞吐量[j])
elif波长[i]
range()
返回整数列表。通过对range()中的i,j使用
,您告诉Python将
range()中的每个项解压为两个值。但是,由于这些值是整数,它们是单个数据段,因此不可编辑,因此会收到错误消息

您的代码看起来也有点奇怪。 起初,您似乎希望循环所有波长/滤波器波长的组合,这与

for i in range(len(wavelength)):
    for j in range(len(filterwavelength)):
         do_stuff()
但是你正在修改循环体中的
j
参数,我不明白


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

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

for i in range(0, len(wavelength))
您试图同时使用两个变量,因此python试图解压一个不可能的整数。你应该使用上面的方法。如果需要两个独立的索引,请使用

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

顺便说一句,范围总是从零开始,这样你就可以省去一些打字,改用
range(len(…)

如果你愿意,你可以使用
zip

选中此项:

如果您有两组数据

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

您的回溯与您发布的代码不匹配。你确定你运行的是相同的代码吗?我复制并粘贴了代码,所以我假设我运行的是相同的代码。因此,如果我用两个if语句替换那一行,一个用于I,一个用于j,那会起作用吗?@NXW这取决于,你想让
I
j
成为什么?例如,可以在itertools.product(范围(len(wavelenth)),repeat=2)中使用i,j的
(请参阅)。