部分代码只在第一次循环中通过python for循环运行
所以我有这段代码。但它仅在第一次迭代中正确运行。在第二次迭代中,内部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))
如果d
是csv.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作为一个迭代器:一旦被读取一次,它耗尽了,不能再产生数据
是的,这似乎是问题所在。是的,individual_dict [术语]应该是一个浮点数,但是当我尝试像这样对待它时,我遇到了一个错误。这不是一个庞大的计划,所以我决定采取行之有效的做法,不要提出问题;) – user1118493 2011-12-28 01:27:44
'图(总和,拉链(searchsums,searchnumbers))'看上去很腥 - 你可能想把它分配给某些东西。这就是说,你不能提供*整个*示例程序,包括'searchtermslist'和'd'的定义和所提及的打印?这将决定问题在哪里容易得多。 – phihag 2011-12-28 01:04:06