我已经定义了如下函数来尝试在两组数据之间进行插值.当我运行它时,我收到消息:
for i, j in range(0, len(wavelength)):
TypeError: 'int' object is not iterable
Run Code Online (Sandbox Code Playgroud)
我不确定我做错了什么.不可否认,我对此并不擅长.
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
Run Code Online (Sandbox Code Playgroud)
range()返回整数列表.通过使用,for i,j in range()您告诉Python将每个项目解压缩range()为两个值.但由于这些值是整数,它们是单个数据,因此不可迭代,因此您会收到错误消息.
你的代码看起来也有点奇怪.起初,似乎你想要遍历波长/滤波器波长的所有组合,这将是相同的
for i in range(len(wavelength)):
for j in range(len(filterwavelength)):
do_stuff()
Run Code Online (Sandbox Code Playgroud)
但是你正在修改j循环体内的参数,我不明白.
无论如何,编写所需代码可能会更容易,更清晰.但是从目前的代码来看,很难知道预期的是什么(并且应该在一个单独的问题中).