Python for循环在第一次迭代后返回零

时间:2013-07-04 02:23:29

标签: python for-loop counter nested-loops

我正在尝试编写一个程序,将列表中的每个项目与文档文本进行比较。然后,程序应返回一个新列表,其中每个项目附加一个值,该值与文档中的单词匹配的次数。我有一个函数编写,实际上匹配,它自己工作正常。执行计数的循环也适用于单个条目。但是,当我尝试为列表的所有条目运行它时,它会返回第一个列表条目的正确数字,然后只为其余部分返回零。

以下是对它的看法:

    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:”循环之外,那么它只返回每个相同的值列表条目。

2 个答案:

答案 0 :(得分:2)

将第一行更改为:

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

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

它失败的原因是因为当你执行for word in doc:时它会遍历文件。所以它只能读一次。如果将文件的内容保存到变量中,则可以根据需要多次迭代它。

答案 1 :(得分:2)

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

for word in doc:
    ...

你需要重新打开它或者回到起点。

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

doc = list(open("C:/..."))