【问题标题】:Breaking a loop if a consecutives numbers appears如果出现连续数字,则打破循环
【发布时间】:2021-08-24 04:49:50
【问题描述】:

我遇到了循环问题。我有一个附加随机数的简单for循环,我需要的是,如果一个数字连续出现多次打破for loop,这是一个例子。

import numpy as np

stop = 3
value = []
for i in range(100):
    value.append(np.random.randint(0, 2))
    print(value)
    if value[-stop:] == [0]*stop or value[-stop:] == [1]*stop:
        break

这段代码的作用是,我想做一个for loop 100 times,但是如果数字0或数字1在列表的最后连续出现3次,那么循环中断,我怎么能推广到任何随机数,而不必为每个随机值添加无限 or。我尝试使用另一个 for 循环来遍历附加列表中的每个值,但它不起作用,即使达到条件,它也会继续附加随机数:

stop = 3
value = []
for i in range(15):
    value.append(np.random.randint(0, 3))
    print(value)
    for i in value:
        if value[-stop:] == [i]*stop: 
            break
This is what I get in the 10th iteration, here it should stop, since 0 appears three times:
[0, 1, 0, 1, 1, 2, 0, 2, 0, 0, 0]

But it keeps doings iterations and the next one is
[0, 1, 0, 1, 1, 2, 0, 2, 0, 0, 0, 2]

任何想法都将不胜感激,如果有不清楚的地方,请告诉我,我会编辑问题。再次感谢您!

【问题讨论】:

  • [i]*stop 不起作用,例如在i=10 的循环中,然后[i]*stop 将为stop=3 提供[10,10,10]

标签: python for-loop if-statement break


【解决方案1】:

检查与组中第一个匹配的所有值:

if all(value[pos] == value[-1] for pos in range(-stop, -2)):

您正在检查最后一个元素value[-1],与从位置-stop-2 的先前元素进行对比。

查找anyall 函数;它们对这类事情非常有用。

【讨论】:

  • 或者可以使用 np.where 以及 all in 作为最后几个提到的值作为停止。对吗?
【解决方案2】:

所以我理解了你的问题并想出了这个答案。让我知道它是否适合你。

import numpy as np

stop = 3
value = []
for i in range(15):
    value.append(np.random.randint(0, 3))
    print(value)
    
    if len(value)<stop:
        continue

    if all(np.where(np.array(value[-stop:])==value[-1], True, False)):
        break

对于其中一个随机运行,我将其作为输出:

[1]
[1, 2]
[1, 2, 0]
[1, 2, 0, 1]
[1, 2, 0, 1, 1]
[1, 2, 0, 1, 1, 1]

让我知道这是否适合您,或者您是否寻求其他修改。

【讨论】:

    猜你喜欢
    • 2022-12-01
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    相关资源
    最近更新 更多