2014-12-05 3 views
0

다음과 같이 두 가지 데이터 집합 사이를 보간하려고하는 함수를 정의했습니다. 실행하면 다음 메시지가 나타납니다.간단한 오류 메시지를 이해하지 못함

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

http://stackoverflow.com/questions/18830145/typeerror-int-object-is-not-iterable-python-2-7 http://stackoverflow.com/questions/19523563/python-typeerror-int-object-is-not-iterable –

+0

추적 코드는 게시 한 코드와 일치하지 * 않는 * 일치하지 않습니다. 동일한 코드를 실행하고 있습니까? –

+0

코드를 복사하여 붙여 넣었으므로 동일한 내용으로 실행 중이어야한다고 가정합니다. – NXW

답변

5

range()은 정수 목록을 반환합니다. for i,j in range()을 사용하면 파이썬에게 range()에있는 각 항목의 압축을 두 값으로 지정합니다. 그러나 그 값은 하나의 데이터이며 따라서 반복 할 수없는 정수이기 때문에 오류 메시지가 나타납니다.

코드도 약간 이상해 보입니다. 당신이

for i in range(len(wavelength)): 
    for j in range(len(filterwavelength)): 
     do_stuff() 

와 동일하게 될 것입니다하지만 당신은 내가 이해할 수없는 루프 본체 내부의 j 매개 변수를 수정하는 파장/filterwavelength의 모든 조합을 통해 루프, 원하는처럼 은 처음에는 보인다 .

관계없이 모든 코드를 작성하는 것이 훨씬 쉽고 명확합니다. 그러나 현재 코드에서 예상되는 것을 아는 것은 어렵습니다. (아마도 별도의 질문으로 진행해야합니다).

+0

그래서 if 대신 두 줄의 if 문으로 바꾸면됩니다. 하나는 j이고 다른 하나는 j입니다. – NXW

+0

@NXW에 따라, 당신은'i'와'j'를 무엇을 얻으려고합니까? 예를 들어 'itertools.product (범위 (len (wavelenth)), 반복 = 2)에서 i, j에 대해 '([여기] (https://docs.python.org/2/library/itertools.html#itertools.product 참조))). – jonrsharpe

2

문제는 범위가 하나 개의 변수과 같이 작동한다는 것입니다 :

for i in range(0, len(wavelength)) 

당신은 에 파이썬 시도가 불가능 정수를 풀고, 그래서 한 번에 두 변수를 사용하려고합니다. 위 내용을 사용해야합니다. 당신은 두 개의 독립적 인 인덱스를해야 할 경우 자신에게 어떤 입력을 저장하고 대신 range(len(...))을 사용할 수 있도록 BTW, 항상 0으로 시작 범위

for i in range(0, len(...)) 
    for j in range(0, len(...)) 

를 사용합니다.

관련 문제