我正在尝试编写一个程序,将列表中的每个项目与文档文本进行比较。然后,程序应返回一个新列表,其中每个项目附加一个值,该值与文档中的单词匹配的次数。我有一个函数编写,实际上匹配,它自己工作正常。执行计数的循环也适用于单个条目。但是,当我尝试为列表的所有条目运行它时,它会返回第一个列表条目的正确数字,然后只为其余部分返回零。
以下是对它的看法:
doc = open("C:/...")
list = ['string_1', 'string_2', 'string_3', ...]
answer = []
...
[some code]
...
for t in list:
counter = 0
for word in doc:
if func(word,t) == True:
counter += 1
answer.append([counter,t])
print answer
回答我的问题最接近的是this文章。 但是,我确实想重置每个列表项的计数器,并且我没有在计算完成的实际“for”语句中包含“counter = 0”。
我觉得它可能与“counter = 0”赋值的位置有关,但如果我将它放在“for t in list:”循环之外,那么它只返回每个相同的值列表条目。
答案 0 :(得分:2)
将第一行更改为:
doc = open("C:/...").read().split()
这应该返回文件中所有单词的列表。
它失败的原因是因为当你执行for word in doc:
时它会遍历文件。所以它只能读一次。如果将文件的内容保存到变量中,则可以根据需要多次迭代它。
答案 1 :(得分:2)
此循环正在读取文件的末尾
for word in doc:
...
你需要重新打开它或者回到起点。
快速破解(我猜你的程序是一个快速破解,因为你不打算关闭文件),你可以使用
doc = list(open("C:/..."))