2011-12-28 263 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

相关问题