簡體   English   中英

代碼的一部分僅在第一次迭代中通過python中的for循環運行

[英]Portion of code running only in the first iteration through a for loop in python

所以我有這個代碼。 但它只在第一次迭代時正確運行。 在第二次迭代中,不啟動內部for循環。 想法為什么?

額外信息如果有幫助:d是DictReader對象,searchtermslist是字符串列表。 當我在第1點寫一條打印行時,它會在每次我預期的時候打印出來。 但是,當termindex = 0但不是任何其他時間時,點2處的打印行打印。 需要幫助請叫我。

提前致謝

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))

您的第一個循環迭代會消耗d ,使其無法用於后續迭代。 在嘗試使用它之前將其讀入列表或元組。

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

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

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

那么你可以像這樣返回文件的開頭:

>>> myfile.seek(0)

你可以直接寫:

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

雖然將str應用於某些東西然后被迫申請float似乎很奇怪

indiv_dict[term]本身不是浮動嗎?

我認為你的問題是由於d充當迭代器的事實:一旦它被讀取一次,它就會耗盡並且不再產生數據

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM