我正在尝试迭代两个列表,一个包含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
有什么想法吗?
答案 0 :(得分:3)
j=pyfits.getdata(i)
此行不会将数据存储到名称存储在j
中的变量。相反,它将数据存储到变量j
。您想要的是制作数据列表:
data = [pyfits.getdata(filename) for filename in list1]
这将创建一个列表,其中data[0]
是第一个文件中的数据,data[1]
是来自第二个文件的数据等。
答案 1 :(得分: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]
等
答案 2 :(得分:0)
您可以使用map
功能:
list2 = map(pyfits.getdata,list1)
zip(list1,list2) #not needed here
并创建漂亮的字典后
di = dict(zip(list1,list2))
di
的结构类似于{filename1:data1,filename2,data2}