簡體   English   中英

無法理解簡單的錯誤消息

[英]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(...))

您可以根據需要使用zip

檢查一下: 一次遍歷兩個或多個列表的更好方法

如果您有兩組數據。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM