0

我正在尝试遍历两个列表,一个包含 76 个文件,另一个包含 76 个变量来读取文件。我想我可以用 zip(list1, list2) 遍历它们,但由于某种原因它不起作用。这是我正在做的事情:

list1=['file1', 'file2', 'file3']
list2=['v1','v2','v3']
for i,j in zip(list1,list2):
    j=pyfits.getdata(i)       #just trying to read a FITS file

当我用 print 做同样的事情时,效果很好:

list1=['file1', 'file2', 'file3']
list2=['v1','v2','v3']
for i,j in zip(list1,list2):
    print i, j

有任何想法吗?

4

3 回答 3

3
j=pyfits.getdata(i)

此行不会将数据存储到名称存储在j. 相反,它将数据存储到变量j中。您想要的是制作数据列表:

data = [pyfits.getdata(filename) for filename in list1]

这将创建一个列表,其中data[0]是第一个文件data[1]中的数据,是第二个文件中的数据,等等。

于 2013-08-13T20:14:31.973 回答
2

我假设您正在尝试将字符串分配给返回list2的数组pyfits.getdata()。但是,list2包含字符串,您不能以这种方式将数组分配给字符串。有一些 hacky 方法可以做到这一点,但这在 Python 中不是很好的做法。我建议使用字典,其中的字符串list2可以是字典中的键。

这是一个例子:

data = {}
list1=['file1', 'file2', 'file3']
list2=['v1','v2','v3']
for i,j in zip(list1,list2):
    data[j] = pyfits.getdata(i)

然后,您可以使用 、 等访问您的data[v1]数据data[v2]

于 2013-08-13T20:14:16.643 回答
0

您可以使用map以下功能:

list2 = map(pyfits.getdata,list1)
zip(list1,list2) #not needed here

在创建漂亮的字典之后

di = dict(zip(list1,list2))

di结构如下{filename1:data1,filename2,data2}

于 2013-08-13T20:48:38.113 回答