Python中最简单的替代while循环的方法

0 投票
1 回答
12304 浏览
提问于 2025-04-16 12:09

这个程序的主要目的是搜索单词,并确保它们出现的顺序是正确的。

我现在使用的代码是

while not corpus[index_F2-1] == corpus[index_B]:
    index_F2 = corpus.index(corpus[index_F2], index_F2+1) 

这个代码的作用是搜索一个单词,检查在它之前是否有特定的单词出现,如果没有,就在文本中找到同一个单词的其他实例。这个代码唯一的问题是,如果条件从来没有满足,它会返回一个错误。与其返回错误,不如让它退出循环,然后给“F2”赋一个新值,以便重新尝试。显而易见的办法是使用一个while循环,但我不太确定如何让while循环在当前的F2有效时不去寻找新的值。简单来说,程序如果按以下顺序运行会是最好的:

  1. 检查当前的F2是否能有效
  2. 如果不能有效,就给F2赋一个新值。
  3. 再检查一次,看看新的F2是否有效
  4. 依此类推

可能需要用到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

撰写回答