Python中最简单的替代while循环的方法
这个程序的主要目的是搜索单词,并确保它们出现的顺序是正确的。
我现在使用的代码是
while not corpus[index_F2-1] == corpus[index_B]:
index_F2 = corpus.index(corpus[index_F2], index_F2+1)
这个代码的作用是搜索一个单词,检查在它之前是否有特定的单词出现,如果没有,就在文本中找到同一个单词的其他实例。这个代码唯一的问题是,如果条件从来没有满足,它会返回一个错误。与其返回错误,不如让它退出循环,然后给“F2”赋一个新值,以便重新尝试。显而易见的办法是使用一个while循环,但我不太确定如何让while循环在当前的F2有效时不去寻找新的值。简单来说,程序如果按以下顺序运行会是最好的:
- 检查当前的F2是否能有效
- 如果不能有效,就给F2赋一个新值。
- 再检查一次,看看新的F2是否有效
- 依此类推
可能需要用到if语句,但具体放在哪里以及如何使用,我不太确定。此外,重新赋值给F2的代码已经存在,具体是
index_E2= corpus.index(corpus[index_E2], index_E2+1)
index_F = index_E2+1
index_F2 = corpus.index(corpus[index_F], index_F+1)
未来可能会出现的问题是,文本中可能会没有F2的值(因为E2的值用完了),这时也会显示类似的错误,但那是另一个问题。
1 个回答
1
我想我明白你在找什么。听起来你想要有多个嵌套的循环,并且在最里面的循环中有一个退出点。对我来说,最简单的方法就是把这些循环放在一个函数里。因为所有这些corpus
的东西有点复杂,我就用一个简单的例子来说明:
words_to_find = ['tree', 'cow', 'lots_of_other_words']
words_to_search = ['bathtub', 'more_words']
def find_words(words_to_search, words_to_find):
for i, fword in enumerate(words_to_find):
for j, sword in enumerate(words_to_search):
if fword == sword:
return (fword, i, j)
你可以在这里嵌套任意数量的循环——无论是for
循环、while
循环,还是其他的——一旦找到你想要的东西,就可以轻松地退出所有的循环。
如果这没有回答你的问题,请告诉我。
补充:如果你想把所有内容放在一个while
循环里,你可以这样做:
word_list = ['blah', 'blah2', 'etc']
word_list2 = ['other', 'words']
i = 0
j = 0
while True:
if i == len(word_list):
i = 0
j += 1
elif thing_I_want(word_list[i], word_list2[j]):
do_something()
break
else:
i += 1