【问题标题】:getting a for loop to restart if a condition is satisfied如果满足条件,则重新启动 for 循环
【发布时间】:2017-02-25 20:57:58
【问题描述】:

有没有办法让 for 循环在循环中的任何点重新开始?假设线的长度为三。如果满足 if 语句并且我的索引增加,我希望一切都在 line 的第一个值处重新开始检查。 (请注意,这整件事是 while True 循环的一部分)。

for line in library:
        if message[index:index + len(line)-2] == line[2:]:
            ans += line[0]
            index += len(line)-2 + 1

【问题讨论】:

  • 我不明白你在这里问什么......
  • @Arman 所以行包含我想在消息中逐个子串检查子串的值。目前,当我找到匹配项并增加索引以查看下一位是否也有匹配项时,它仅从行的下一个元素开始(并跳过第一位)。因此,即使有比赛,我也不会得到它。我想知道是否可以在索引增加后将 for 循环重新启动到行的第一个元素?

标签: python for-loop


【解决方案1】:

我认为您需要在for loop 之上再添加一个while True。 例如,除非有中断条件,否则这是一个连续循环

x = [1, 2, 3, 4, 5, 6]
restart = True
while restart:
    for i in x:
        # add any exit condition!
        # if foo == bar:
        #   restart = False
        #   break
        if i == value:  # add your message condition
           break

在您的情况下,您可以将x 替换为library,并将i 替换为line。然后,如果 i == 4 添加了重置循环的中断条件,并且如果确实有实际的中断条件,则将 restart 标志设置为 False

另一种选择是使用像n = 2 这样的循环计数器并使用while n < 2:,然后在满足您的条件时设置n += 1,或者在您想要重置时设置n = 0

【讨论】:

  • 你需要一个 StopIteration 捕获,否则它会在列表结束后重新启动
【解决方案2】:

如果我没看错,您想在找到匹配项时完全重新启动循环。最简单的方法是跳出 for 循环,正如您所说的那样,您上面有一个 while 循环,它保持为 True 并将重新启动 for 循环:

for line in library:
        if message[index:index + len(line)-2] == line[2:]:
            ans += line[0]
            index += len(line)-2 + 1
            break

【讨论】:

  • 我怎样才能彻底爆发?是的,我有一个围绕所有这些的 while 循环,但我在这下面有更多我希望能够访问的代码。当我现在 break 时,我只是离开了 for 循环,但 break 让我回到了 for 中。我如何离开 for 和 while 以获取下一段代码?谢谢:)
  • 更新:我明白了 :) 制作了一个等于一个单词的字符串,然后检查该单词是否等于它以打破它。谢谢大家! xx
  • @K.Carpenter 很高兴听到!虽然,如果您只是想在到达 for 循环结束时退出 while 循环(包括重新启动),您可以在与 for 循环相同的缩进处添加一个 else 语句,在其中将 while 循环条件变为 False .这个 else 语句将在 for 循环结束时到达。
猜你喜欢
  • 2019-11-23
  • 2021-08-22
  • 2020-02-20
  • 2019-04-06
  • 1970-01-01
  • 1970-01-01
  • 2015-08-22
  • 1970-01-01
  • 2021-07-17
相关资源
最近更新 更多