2011-12-28 4 views
0

그래서이 코드가 있습니다. 그러나 첫 번째 반복 만 제대로 실행됩니다. 두 번째 반복에서는 inner for 루프가 시작되지 않습니다. 왜 그런가?파이썬에서 for 루프를 통해 첫 번째 반복에서만 실행되는 코드 부분

도움이된다면 추가 정보 : d는 DictReader 개체이고 searchtermslist는 문자열 목록입니다. 포인트 1에 프린트 라인을 쓸 때마다 기대했던 시간마다 프린트됩니다. 그러나 포인트 2의 인쇄 라인은 termindex = 0 일 때 인쇄하지만 다른 시간은 인쇄하지 않습니다. 네가 필요한 것이 있으면 알려줘. 사전에

감사합니다, D 첫 번째 루프 반복 이후의 반복을 사용할 수 없습니다를 떠나, d 소비

searchsums=[] 
for termindex, term in enumerate(searchtermslist): 
    #Point 1 
    searchnumbers=[] 
    for indiv_dict in d: 
     #point 2 
     val=indiv_dict[term] 
     result=str(val) 
     numbler=float(result) 
     searchnumbers.append(numbler) 
    if termindex==0: 
     searchsums=searchnumbers[:] 
    else: 
     map(sum,zip(searchsums,searchnumbers)) 
+2

'지도 데이터를 생성하지 않습니다 (합계, 우편 (searchsums, searchnumbers))'물고기처럼 보입니다 - 아마 뭔가를 할당하고 싶을 것입니다. 즉,'searchtermslist'의 정의와'd'와 언급 한 인쇄물을 포함하여 전체 예제 프로그램을 제공 할 수 있습니까? 그러면 문제가 어디에 놓여 있는지 쉽게 판단 할 수 있습니다. – phihag

답변

1

. 그것을 사용하려고 시도하기 전에리스트 나 터플로 읽어 들인다.

+0

그걸 고쳤습니다. 감사! – user1118493

1

d 개체가 csv.DictReader 인 경우 파일을 반복 할 때 파일을 모두 사용할 때까지 (예 : 파일 끝) CSV 파일의 행을 읽습니다. 파일이 이미 파일 끝 (end-of-file)에 있기 때문에 두 번째 시도를 반복하면 결과가 생성되지 않습니다.

파일의 처음으로 돌아 가야합니다.

>>> myfile.seek(0) 
0

당신은 직접 작성할 수 있습니다 :

searchnumbers.append(float(str(indiv_dict[term]))) 

비록을

>>> myfile = open('name_of_csv_file.csv', 'r') 
>>> d = csv.DictReader(myfile) 

는 다음과 같이 파일의 시작 부분에 반환 할 수 있습니다 예를 들어, 당신은이 같은 d을 생성 이상한 것 같아서 str을 적용한 다음 적용해야합니다. float

indiv_dict[term]은 플로트 자체가 아니겠습니까?

.

나는 당신의 문제는 사실 때문이라고 생각 반복자로 D 행위 : 그것은 한 번 읽은 후, 그것은 소진 더 이상

+0

그래, 그게 문제가 된 것 같습니다. 예, indiv_dict [term]은 부동 소수점이어야합니다.하지만이를 처리 할 때 오류가 발생했습니다. 거대한 프로그램이 아니기 때문에 나는 일한 것과 함께 가고 질문을하지 않기로 결정했습니다.) – user1118493

관련 문제