在python循环中读取无限循环文件

2024-10-01 02:38:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含单词列表的文件,我正试图逐行查找一个单词。常见单词文件示例如下:

yourself
yourselves
z
zero

列表是按字典顺序排序的。在

^{pr2}$

现在这个函数进入了一个无限循环。我不知道这是怎么发生的。任何帮助将不胜感激。如果我尝试除“零”之外的其他变量,那么它就可以完美地工作了。只有有了“零”,我才面临麻烦。谢谢您抽出时间。在


Tags: 文件函数示例列表字典排序顺序时间
3条回答

当您试图读取超过文件结尾的内容时,readline将返回空字符串,空字符串将比较''任何单词,因此如果您要查找的单词是>文件中的任何单词,则循环条件始终为真。在

可以通过将循环重写为

def isCommonWord(word):
    with open("common_words") as f:
        for w in f:
            w = w.rstrip()
            if w == word:
                return True
            elif w > word:
                break

    return False

虽然问题的真正解决方案是读取一次文件并从中生成一个set

^{pr2}$

对于"yourself"<="zeros",条件为真,while循环将无限继续。在

因此,如果向函数传递比其他单词大lexicographically的任何单词,那么程序将进入无限循环。 例如,for "zz" “yourself”<;=“zz”将运行到一个无限循环中,因为zz比文件中的所有其他单词common_words大。在

isCommonword()的更好版本是:

def isCommonWord(word):

    commonWordList = open("common_words.txt")
    commonWord = [x.rstrip() for x in commonWordList]
    if word in commonWord:
        return True
    else:return False

问题是zeros会出现在文件中最后一个单词之后,但您不会检查这个词。而且,readline()只会给你一个空字符串,如果你已经到达了文件的末尾,那么循环只会一直认为“还没有到”,并且永远继续下去。在

顺便说一句,有更好的方法,利用列表是排序的:看看二进制搜索。在

事实上,如果您有大量的空闲内存,那么您可以做得更好:只需将整个文件读入一个大的set中,然后检查成员资格需要持续的时间!在

相关问题 更多 >