2

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

  • 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循环,但是如果添加一个新点,我看不出如何从第一点重新开始。

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

谢谢您的帮助!

4

4 回答 4

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
于 2013-08-12T18:21:52.460 回答
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

作为旁注,在使用这样的循环时要小心无限循环。

于 2013-08-12T18:39:31.700 回答
1
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
于 2013-08-12T18:26:09.873 回答
1

使用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
于 2013-08-12T18:26:12.800 回答