1

我正在尝试编写一个程序,将列表中的每个项目与文档文本进行比较。然后程序应该返回一个新列表,其中每个项目都附加一个值,表明它与文档中的单词匹配了多少次。我编写了一个函数来实际进行匹配,并且它本身就可以正常工作。进行计数的循环也适用于单个条目。但是,当我尝试对列表的所有条目运行它时,它会返回第一个列表条目的正确编号,然后只为其余的条目返回零。

这是它的样子:

    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

最接近回答我的问题的是这篇文章。但是,我确实想为每个列表项重置计数器,并且我没有在完成计算的实际“for”语句中包含“counter = 0”。

我有一种感觉,它可能与“counter = 0”赋值的位置有关,但如果我将它放在“for t in list:”循环之外,那么它只会为每个列表条目返回相同的值。

4

2 回答 2

2

将您的第一行更改为:

doc = open("C:/...").read().split()

这应该会返回文件中所有单词的列表。

它失败的原因是因为当你这样做时for word in doc:它正在遍历文件。所以它只能被读取一次。如果您将文件的内容保存到一个变量中,您可以随意对其进行多次迭代。

于 2013-07-04T02:25:51.260 回答
2

此循环正在读取到文件末尾

for word in doc:
    ...

您需要重新打开它或回到开头。

对于快速破解(我猜你的程序是一个快速破解,因为你不想关闭文件),你可以使用

doc = list(open("C:/..."))
于 2013-07-04T02:34:54.833 回答