在python中嵌套for循环不会增加外部for循环

时间:2015-09-13 05:40:06

标签: python for-loop nested

我有两个文件:q.txt包含单词,p.txt包含句子。我需要检查q.txt中的任何单词是否存在于p.txt中。以下是我写的:

#!/usr/bin/python
twts=open('p.txt','r');
words=open('q.txt','r');
for wrd in words:
        for iter in twts:
                if (wrd in iter):
                        print "Found at line" +iter

即使匹配也不打印输出。此外,我可以看到外部for循环不会进入单词对象中的下一个值。有人可以解释我在这里做错了什么吗?

编辑1:我使用的是Python 2.7 编辑2:抱歉,我混淆了变量名称。现在已经纠正了。

3 个答案:

答案 0 :(得分:3)

当您遍历文件对象时,在完成迭代后,光标最终会在文件末尾。因此,尝试再次迭代它(在外部for循环的下一次迭代中)将不起作用。代码工作的最简单方法是在外部for循环开始时寻找文件的启动。示例 -

#!/usr/bin/python
words=open('q.txt','r');
twts=open('p.txt','r');
for wrd in words:
    twts.seek(0)
    for twt in twts:
        if (wrd.strip() in twt):
            print "Found at line" +iter

此外,根据问题,您似乎使用了错误的文件,twts应该是包含句子的文件,words包含文字的文件。但是您已为p.txt打开words,并为句子打开q.txt。如果相反,你应该打开其他文件。

另外,建议不要使用iter作为变量名称,因为它也是内置函数的名称,并且您在 - for iter in twts中定义它 - 阴影内置函数 - iter()

答案 1 :(得分:2)

如果您发布了文件的内容但是从行中划分了\n会更好吗?这对我有用:

words = open('words.txt', 'r')
twts = open('sentences.txt', 'r')

for w in words:
    for t in twts:
        if w.rstrip('\n') in t.rstrip('\n'):
            print w, t

答案 2 :(得分:0)

当你用完迭代器后迭代推文时,指针位于文件的末尾,所以在第一次迭代后没有任何东西可以迭代,你可以{{1}反复但是如果单词不是一个巨大的文件,你可以创建一组所有单词,这样你只需要在句子文件上迭代一次0(n * k)运行时间,而不是每次读取每一行的二次解决方案单词文件中的单词,拆分也会匹配确切的单词而不是子串:

seek