使用带有两个列表的zip

时间:2013-08-13 19:56:51

标签: python list zip iteration

我正在尝试迭代两个列表,一个包含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

有什么想法吗?

3 个答案:

答案 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}