2014-03-03 7 views
0

을 위해 내장이 코드루프 파이썬

for n in halo_param: 
    for i in range(0,a): 
     mask = var1['halo_id'] == n 
     newtbdata = tbdata1[mask] 
     hdu = pyfits.BinTableHDU(newtbdata) 
     hdu.writeto(('/home/ssridhar/test_roncarelli/13.8_M200_13.9/halo_{0}.fits').format(i)) 
다음 halo_param

chararray이고 a = len(halo_param)

chararray(['465000725000010', '43000145000011', '40000536000011', 
    '499000523000009', '463000313000010', '470000639000011', 
    '462000416000010', '499000549000008', '506000176000009'] 

을 가지고 내가, 내 프로그램 halo_param의 값에해야 할 일은 노력하고, 하나씩 하나씩 파일을 작성하십시오 (예 : 첫 번째 파일의 이름은 halo_0.fits 및 두 번째 halo_1.fits 등으로 지정해야 함)

내 프로그램은 halo_param의 값으로 파일을 출력, 즉 내가 halo_465000725000010처럼, 루프 내 초를 제거하는 경우, halo_43000145000011 등 루프에 대한 두 번째가 포함되어

하면, 내 프로그램이 작업을 수행 작동하는 것 같다 모든 파일에 대해 동일한 첫 번째 조건을 실행합니다.

여기서 내가 뭘 잘못하고 있니?

답변

3

loop-in-a-loop를하지 마십시오.

for i,n in enumerate(halo_param): 
    mask = var1['halo_id'] == n 
    newtbdata = tbdata1[mask] 
    hdu = pyfits.BinTableHDU(newtbdata) 
    hdu.writeto(('/home/ssridhar/test_roncarelli/13.8_M200_13.9/halo_{0}.fits').format(i)) 

편집처럼 평평 : 당신이 루프에서-A-루프를 통해 추적 할 경우, 당신이 [0] file_0하는 halo_param을 쓰려고 것을 볼 것이다, 다음 [1] file_0하는 halo_param 및 file_1, ... 다음 halo_param [8]을 file_0, file_1, file_2 ... file_8로 변경하십시오. 최종 파일의 복사본 인 모든 파일로 끝납니다.

+0

이것은 작동하는 것 같습니다. 그러나 가능한 경우 루프 내부의 루프가 작동하지 않는 이유를 설명 할 수 있습니까? – ThePredator

+0

하지만 a = 10, 그리고 우리가 범위 (0, a)에 대해 말할 때 : 각 단계에서 0에서 9까지의 값을 취하지 않습니까 ?? 이것이 제가 코드를 이렇게 쓴 이유입니다. – ThePredator

+1

@Srivatsan : 예, 저의 경우 : 항목 0의 경우 모든 파일을 씁니다. 항목 1에 대해 _ag_ _ 파일을 작성하여 이전주기의 작업을 삭제합니다. 그러면 항목 2, 3, ... 9.에 대해 작업이 반복적으로 끝나고 항목 9의 출력만으로 끝납니다. 루프를 평평하게하면 항목 1의 데이터가 파일 1에 저장되고, 항목 2의 데이터는 파일 2에 저장됩니다. –

0

문자열 형식을 수정 하시겠습니까?

for n in halo_param: 
    for i in range(0,a): 
     mask = var1['halo_id'] == n 
     newtbdata = tbdata1[mask] 
     hdu = pyfits.BinTableHDU(newtbdata) 
     hdu.writeto(('/home/ssridhar/test_roncarelli/13.8_M200_13.9/halo_{0}.fits'.format(i)))