【问题标题】:Most straightforward alternative to a while loop in pythonpython中while循环的最直接替代方案
【发布时间】:2011-06-30 15:08:50
【问题描述】:

该程序的一般要点是搜索单词并确保它们以正确的顺序出现。

我目前正在使用代码

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 值)并显示类似的错误,但这是另一个问题。

【问题讨论】:

  • 很难理解你的意思。你能举一个或多个例子吗?

标签: python loops search while-loop


【解决方案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)

您可以在此处嵌套任意数量的循环——forwhile 等等——一旦你找到了你想要的东西,你仍然可以轻松地摆脱所有这些循环。

如果这不能回答您的问题,请告诉我。


编辑:我想如果您想在一个 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

【讨论】:

  • 这确实回答了我的问题。实现可能有点麻烦(它很长,而且我对此很陌生),但这比我希望的要简单得多。非常感谢。
  • 有一件事让我有点困惑。如果我拥有的循环是内循环,而寻找新 F2 的循环是外循环,那么如果内循环有效,我将如何让它跳过外循环?也就是说,如果我当前的 while 循环不会返回错误,它应该跳过外部循环。这会涉及一段真实的陈述吗?如果您之前的代码考虑到这一点,我深表歉意,我在将其应用于我的代码时遇到了一些麻烦。
  • @Michael Rauh,在我的函数示例中,return 语句打破了所有嵌套循环并将控制流返回到调用函数的点。因此,使用我的第一个示例,您调用find_words(x, y),它会一直运行直到找到匹配项,然后它立即returns 到调用find_words 的位置,打破(即“跳过”)所有循环。您当然可以使用while True: 作为外循环,但这与这个问题无关。在我的第二个示例中,只有一个循环,break 语句从循环中跳出。
  • 现在说得通了。我有一种感觉,你已经想到了,我就是没发现。
猜你喜欢
  • 2019-02-15
  • 1970-01-01
  • 1970-01-01
  • 2013-08-23
  • 2017-08-06
  • 1970-01-01
  • 2021-05-25
  • 1970-01-01
  • 2020-03-21
相关资源
最近更新 更多