2013-08-13 4 views
0

76 개의 파일과 76 개의 변수가있는 두 개의 목록을 반복하여 읽으려고합니다. zip (list1, list2)을 사용하여 반복 할 수 있다고 생각했지만 어떤 이유로 작동하지 않습니다. 나는 인쇄와 같은 일을 수행 할 때두 개의 목록이있는 zip 사용

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 

대신이 잘 작동 :

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

모든 아이디어를 여기 내가 뭐하는 거지 무엇인가?

답변

3
j=pyfits.getdata(i) 

이름이 변수에 데이터를 저장하지 않는이 라인이 저장됩니다 여기

은 예입니다 j. 오히려 데이터를 변수 j에 저장합니다.

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

data[1] 번째부터의 데이터를하고, data[0] 첫 번째 파일의 데이터 인 목록을 만들 것 등

1

list2에있는 문자열을 pyfits.getdata()이 반환하는 배열에 할당하려고한다고 가정합니다. 그러나 list2에는 문자열이 들어 있으므로이 방법으로 문자열에 배열을 할당 할 수 없습니다. 해킹하는 방법이 있지만 파이썬에서는 좋지 않습니다. 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]하여 데이터를 액세스 할 수있는 등

+1

@ user2357112 님의 답변과 비슷한 사전 이해도 사용할 수 있습니다. – abeinstein

0

당신에게 : 당신이 원하는 것은 데이터의 목록을 대신하다 map 기능을 사용할 수 있습니다 :

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

을 후에 꽤 딕셔너리를 생성

di = dict(zip(list1,list2)) 

di은 다음과 같이 구성됩니다. {filename1:data1,filename2,data2}

관련 문제