【问题标题】:Using a for if break statement to append values in a list使用 for if break 语句在列表中附加值
【发布时间】:2021-08-24 03:23:03
【问题描述】:

我正在使用循环,我有一个问题,所以我有一个简单的for loop,它在 0 和 1 之间附加随机值,基本上我需要的是不断添加值直到出现一定数量的 0 或 1 ,例如:

iteration 1 = [0]
iteration 2 = [0,1]
...
iteration 6 = [0,1,1,1,1,1] #Here appear five 1's so I break the loop (it can be another number not necessarily 5 ones or 5 zeros)

for loop 非常简单:

import numpy as np

value = []
for i in range(5):
    value.append(np.random.randint(0, 2))
    print(value)

这是我尝试使用if-break 语句打破循环的原因

value = []
for i in range(5):
    if value == value:
        value.append(np.random.randint(0, 2))
    else
        break

    print(value) 

我最大的问题是我不知道如何指定如果出现一定数量的 0 或 1 会打破循环,所以我希望你能指出我正确的方向。提前谢谢!

【问题讨论】:

    标签: python list for-loop if-statement break


    【解决方案1】:

    在您不知道具体需要多少次迭代的情况下,使用while 循环是事实上的标准 您可以将两个变量作为最大允许数,在此示例中,我使用numOnes as 5numbZeros as 3,使用While True 循环并在每次迭代时检查条件,如果条件不满足则中断。

    import numpy as np
    numOnes = 5
    numZeros = 3
    value = []
    while True:
        value.append(np.random.randint(0, 2))
        print(value)
        if value.count(0) >= numZeros or value.count(1)>=numOnes:
            break
    

    由于您通常询问 break 语句,所以我使用了 if 条件,否则您可以像 while value.count(0) >= numZeros or value.count(1)>=numOnes: 那样使用 while 循环本身的条件

    另外,如果您使用 for 循环,因为您只想要指定的迭代次数,那么您的循环很好,您不需要使用 while 循环,只需在出口处添加 if 条件循环点:

    import numpy as np
    numOnes = 5
    numZeros = 3
    value = []
    for i in range(5):
        value.append(np.random.randint(0, 2))
        print(value)
        if value.count(0) >= numZeros or value.count(1)>=numOnes:
            break
    

    【讨论】:

    • 非常感谢您这么久我现在可以清楚地看到事情了,如果我需要数字是连续的,也许这有点牵强,在您的示例中,循环可能会中断当这两个条件中的任何一个发生时,一个例子可能是 [0, 0 ,1, 0] 但如果我需要在发生类似情况时发生中断怎么办: [0, 1, 0 ,0 0] 在这种情况下我最后三个连续的零,再次感谢您。
    • @CarlosEduardoCorpus,如果您想检查连续性,这将成为一个不同的问题,但解决方案是在每次迭代时使用结果列表的切片并进行比较。例如:类似于value[-numZeros:] == [0]*numZeros的东西,你可以测试一下,它会为value=[1, 0, 1, 0, 0]numZeros=2给出True
    • 再次感谢您,也许我应该问一个不同的问题。
    【解决方案2】:

    你可以数数要打破的数字。

    value = []
    count = [0, 0]
    while True:
        value.append(np.random.randint(0, 2))
        count[value[-1]] += 1
        if count[1] == 5: # or something like that
            break
    

    编辑:如果您需要连续的值,您可以在不需要的值出现时相应地重置计数。

        count[value[-1]] += 1
        count[1 - value[-1]] = 0
    

    【讨论】:

    • 当列表的任何位置出现五个时,这段代码就会中断,但是如果需要五个连续出现怎么办,例如[0,1,1,1,1,1],不是 [1, 0, 1, 1, 1, 1]
    • @CarlosEduardoCorpus 然后您可以将其他值计数重置为 0。我编辑了帖子。
    【解决方案3】:

    使用两个变量来跟踪随机数 getter 生成的 0 和 1 的数量。

    然后,在 for 循环中使用 if 语句逻辑在适当的地方追加或中断

    【讨论】:

      猜你喜欢
      • 2018-04-16
      • 2018-03-05
      • 2014-02-21
      • 2021-02-07
      • 1970-01-01
      • 2022-05-21
      • 1970-01-01
      • 2014-01-07
      • 2021-06-08
      相关资源
      最近更新 更多