2011-12-28 133 views
0

所以我有這段代碼。但它僅在第一次迭代中正確運行。在第二次迭代中,內部for循環未啓動。想法爲什麼?部分代碼只在第一次循環中通過python for循環運行

額外的信息,如果有幫助:d是一個DictReader對象,searchtermslist是字符串列表。當我在第1點寫一條打印線時,每當我期待它時打印。但是,當終點索引= 0時,點2處的打印行將打印,但不會在其他時間打印。需要幫助請叫我。

在此先感謝, 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 2011-12-28 01:04:06

回答

1

你的第一個循環迭代消耗d,留下了後續的迭代不可用。在嘗試使用它之前將它讀入列表或元組中。

+0

修復它。謝謝! – user1118493 2011-12-28 01:24:42

1

如果dcsv.DictReader對象,那麼當您迭代它時,它會從CSV文件中讀取行,直到文件耗盡(即文件結束)。嘗試第二次迭代將不會產生任何結果,因爲該文件已位於文件結尾。

你需要回到文件的開頭。例如,如果您創建d這樣的:

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

那麼你就可以回到這樣的文件的開頭:

>>> myfile.seek(0) 
0

你可以直接寫:

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

雖然看來怪異的東西運用str,然後被逼着申請float

不會indiv_dict[term]本身是一個浮點數嗎?

我認爲你的問題是由於這樣的事實:d作爲一個迭代器:一旦被讀取一次,它耗盡了,不能再產生數據

+0

是的,這似乎是問題所在。是的,individual_dict [術語]應該是一個浮點數,但是當我嘗試像這樣對待它時,我遇到了一個錯誤。這不是一個龐大的計劃,所以我決定採取行之有效的做法,不要提出問題;) – user1118493 2011-12-28 01:27:44