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的(请参阅)。