Python 将zip与两个列表一起使用
我试图遍历两个列表,一个包含76个文件,另一个包含76个变量以读取文件。 我想我可以用zip(list1,list2)遍历它们,但由于某些原因它不起作用。 以下是我正在做的:Python 将zip与两个列表一起使用,python,list,zip,iteration,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):
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
有什么想法吗?我假设您正在尝试将
list2
中的字符串分配给pyfits.getdata()
返回的数组。但是,list2
包含字符串,您不能以这种方式将数组分配给字符串。有一些黑客的方法可以做到这一点,但在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]
等访问数据。我假设您试图将list2
中的字符串分配给pyfits.getdata()
返回的数组。但是,list2
包含字符串,您不能以这种方式将数组分配给字符串。有一些黑客的方法可以做到这一点,但在Python中这不是一个好的实践。我建议使用字典,其中list2
中的字符串可以是字典中的键
j=pyfits.getdata(i)
下面是一个例子:
data = {}
list1=['file1', 'file2', 'file3']
list2=['v1','v2','v3']
for i,j in zip(list1,list2):
data[j] = pyfits.getdata(i)
然后您可以使用数据[v1]
,数据[v2]
等访问您的数据
j=pyfits.getdata(i)
此行不将数据存储到名称存储在j
中的变量。相反,它将数据存储到变量j
。您需要的是创建一个数据列表:
data = [pyfits.getdata(filename) for filename in list1]
这将创建一个列表,其中data[0]
是来自第一个文件的数据,data[1]
是来自第二个文件的数据,以此类推
此行不将数据存储到名称存储在j
中的变量。相反,它将数据存储到变量j
。您需要的是创建一个数据列表:
data = [pyfits.getdata(filename) for filename in list1]
这将创建一个列表,其中
data[0]
是来自第一个文件的数据,data[1]
是来自第二个文件的数据,等等。您可以使用map
功能:
list2 = map(pyfits.getdata,list1)
zip(list1,list2) #not needed here
在创建漂亮的dict之后
di = dict(zip(list1,list2))
di
的结构类似于{filename1:data1,filename2,data2}
您可以使用映射功能:
list2 = map(pyfits.getdata,list1)
zip(list1,list2) #not needed here
在创建漂亮的dict之后
di = dict(zip(list1,list2))
di
的结构类似于{filename1:data1,filename2,data2}
你也可以使用字典理解,类似于@user2357112的答案。你也可以使用字典理解,类似于@user2357112的答案