Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将zip与两个列表一起使用_Python_List_Zip_Iteration - Fatal编程技术网

Python 将zip与两个列表一起使用

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做同样的

我试图遍历两个列表,一个包含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

有什么想法吗?

我假设您正在尝试将
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的答案