2024-10-01 02:38:38 发布
网友
我有一个包含单词列表的文件,我正试图逐行查找一个单词。常见单词文件示例如下:
yourself yourselves z zero
列表是按字典顺序排序的。在
现在这个函数进入了一个无限循环。我不知道这是怎么发生的。任何帮助将不胜感激。如果我尝试除“零”之外的其他变量,那么它就可以完美地工作了。只有有了“零”,我才面临麻烦。谢谢您抽出时间。在
当您试图读取超过文件结尾的内容时,readline将返回空字符串,空字符串将比较''任何单词,因此如果您要查找的单词是>文件中的任何单词,则循环条件始终为真。在
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:
set
对于"yourself"<="zeros",条件为真,while循环将无限继续。在
"yourself"<="zeros"
因此,如果向函数传递比其他单词大lexicographically的任何单词,那么程序将进入无限循环。 例如,for "zz" “yourself”<;=“zz”将运行到一个无限循环中,因为zz比文件中的所有其他单词common_words大。在
lexicographically
"zz"
zz
common_words
isCommonword()的更好版本是:
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()只会给你一个空字符串,如果你已经到达了文件的末尾,那么循环只会一直认为“还没有到”,并且永远继续下去。在
zeros
readline()
顺便说一句,有更好的方法,利用列表是排序的:看看二进制搜索。在
事实上,如果您有大量的空闲内存,那么您可以做得更好:只需将整个文件读入一个大的set中,然后检查成员资格需要持续的时间!在
当您试图读取超过文件结尾的内容时,
readline
将返回空字符串,空字符串将比较''
任何单词,因此如果您要查找的单词是>
文件中的任何单词,则循环条件始终为真。在可以通过将循环重写为
虽然问题的真正解决方案是读取一次文件并从中生成一个
^{pr2}$set
:对于
"yourself"<="zeros"
,条件为真,while循环将无限继续。在因此,如果向函数传递比其他单词大
lexicographically
的任何单词,那么程序将进入无限循环。 例如,for"zz"
“yourself”<;=“zz”将运行到一个无限循环中,因为zz
比文件中的所有其他单词common_words
大。在isCommonword()
的更好版本是:问题是
zeros
会出现在文件中最后一个单词之后,但您不会检查这个词。而且,readline()
只会给你一个空字符串,如果你已经到达了文件的末尾,那么循环只会一直认为“还没有到”,并且永远继续下去。在顺便说一句,有更好的方法,利用列表是排序的:看看二进制搜索。在
事实上,如果您有大量的空闲内存,那么您可以做得更好:只需将整个文件读入一个大的
set
中,然后检查成员资格需要持续的时间!在相关问题 更多 >
编程相关推荐