[英]Failing to understand simple error message
我定義了以下函數,以嘗試在兩組數據之間進行插值。 當我運行它時,我收到消息:
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
range()
返回整數列表。 通過for i,j in range()
使用for i,j in range()
您告訴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(...))
Btw范圍始終以零開始,因此您可以節省一些鍵入時間,而改用range(len(...))
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.