我已经定义了如下函数来尝试在两组数据之间进行插值。当我运行它时,我收到消息:
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
答案 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