【问题标题】:Python: Changing the conditions of a 'for' loopPython:更改“for”循环的条件
【发布时间】:2013-08-14 04:00:29
【问题描述】:

我正在尝试遍历一组点,如果满足某些条件,则在当前点和下一个点之间添加另一个点。然后我想再次开始循环,在旧点和新点上运行。 例如:

  • for i in range(3)

    • 如果i 不满足某些条件,请在i 之后添加一个新点。这会将范围更改为range(4)。结束循环,并使用for i in range(4) 重新开始。
    • 如果我确实满足条件,请继续range(3)。如果i 到达末尾而无需添加新点,则退出循环并继续执行其余代码。

我尝试了多种方法,但都无法奏效。我的理解是这样的:

b = 3
for i in range(b):
    if (i meets conditions):
        pass
    else:
        b = b+1
        "retry entire loop with new b"

我也尝试过使用 while 循环,但是如果添加一个新点,我看不出如何让它从第一点重新开始。

我可能遗漏了一些简单的东西,但我只是看不到解决方案。

感谢您的帮助!

【问题讨论】:

  • 我认为在这种情况下,while 循环会更好。
  • 您想从循环的开头重新开始,还是从刚刚添加的点开始?
  • @kindall,我想从循环的开头开始

标签: python for-loop while-loop


【解决方案1】:

使用 while 循环触发新的 for 循环

b = 3

criteria_met = False
while (criteria_met == False):
    for i in range(b):
        if (i == 1):
            b = b+1
            criteria_met = True
            break
print b

这里附带说明,在使用这样的循环时要小心无限循环。

【讨论】:

    【解决方案2】:

    使用 while 循环...

    has_change = True
    b = 3
    while has_change:
        new_b = b
        for i in range(b):   
            if (i meets conditions):
                pass
            else:
                new_b = b+1
                break
        changed = new_b != b
    

    【讨论】:

      【解决方案3】:
      b = 3
      found = False
      while True:
          for i in range(b):
              if (i meets conditions):
                  found = True
                  break # Done - breaks out
          if found:
              break
          else:
              b += 1
      

      【讨论】:

        【解决方案4】:

        您需要为此使用递归函数:

        def func(l):
           for i, el in enumerate(l):
               if (el match the conditions):
                    l.insert(i+1, something)
                    return func(l)
           return l
        
        
        l = [1, 2, 3]
        result = func(l)
        

        或者使用while循环:

        l = [1, 2, 3]
        while True:
            i = 0
            if i >= len(l):
                break
            if (l[i] match the condition):
                l.insert(i+1, something)
                i = 0
            else:
                i += 1
        

        【讨论】:

        • 感谢您的回复。现在就试一试;我认为while True 语句是一种无限期运行while 循环直到你告诉它中断的方法是正确的吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-01-28
        • 2019-06-04
        • 1970-01-01
        • 2022-01-01
        • 2013-03-09
        • 1970-01-01
        • 2021-10-09
        相关资源
        最近更新 更多