代码的一部分仅在第一次迭代中通过python中的for循环运行

时间:2011-12-28 00:59:44

标签: python

所以我有这个代码。但它只在第一次迭代时正确运行。在第二次迭代中,不启动内部for循环。想法为什么?

额外信息如果有帮助:d是DictReader对象,searchtermslist是字符串列表。当我在第1点写一条打印行时,它会在每次我预期的时候打印出来。但是,当termindex = 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))

3 个答案:

答案 0 :(得分:1)

您的第一次循环迭代会消耗d,使其无法用于后续迭代。在尝试使用之前将其读入列表或元组。

答案 1 :(得分:1)

如果dcsv.DictReader对象,那么当您对其进行迭代时,它会从CSV文件中读取行,直到文件耗尽(即文件结束)。尝试迭代第二次将不会产生任何结果,因为该文件已经在文件结尾。

您需要返回文件的开头。例如,如果您创建了d,请执行以下操作:

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

然后你可以像这样返回文件的开头:

>>> myfile.seek(0)

答案 2 :(得分:0)

你可以直接写:

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

虽然在某些事情上应用str然后被迫申请float

似乎很奇怪

indiv_dict[term]本身不是浮动的吗?

我认为你的问题是由于 d 充当迭代器的事实:一旦它被读取一次,它就会耗尽并且不再产生数据