嵌入式循环Python

时间:2014-03-03 16:58:10

标签: python for-loop

我有这段代码

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是一个标题和a = len(halo_param)

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

我想要做的是,我的程序应该逐个接受halo_param的值,并根据a的范围写出文件(即说第一个文件应该命名为halo_0.fits和第二个halo_1.fits等)

如果我删除第二个for循环,我的程序似乎有效,即它打印出值为halo_param的文件,如halo_465000725000010,halo_43000145000011等。

如果包含第二个for循环,我的程序确实有效,但对所有文件执行相同的第一个条件

我在这里做错了什么?

2 个答案:

答案 0 :(得分:3)

不要循环循环;压扁它,就像

一样
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)) 

编辑:如果你追踪循环中的循环,你会看到它试图将halo_param [0]写入file_0,然后将halo_param [1]写入file_0和file_1, ...然后halo_param [8]到file_0,file_1,file_2 ... file_8。最终所有文件都是最后一个文件的副本。

答案 1 :(得分: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)))