如何在出现指定次数连续相同随机数时终止for循环
问题原因
你的代码无法终止的核心问题有两个:
- 内层
for循环的break关键字只能跳出内层遍历循环,不会终止外层的迭代循环,所以哪怕满足条件,外层循环还是会继续执行追加随机数的逻辑 - 逻辑冗余:不需要遍历整个列表的所有值来做判断,你只需要确认列表末尾
stop个元素是否全部相同即可,和值本身是什么无关
优化方案(推荐)
用Python内置all()函数实现一行判断,适配任意随机数范围,不需要额外嵌套循环:
import numpy as np stop = 3 value = [] # 可以根据需求修改range的上限值 for i in range(15): value.append(np.random.randint(0, 3)) print(value) # 先判断列表长度是否足够,避免索引越界 if len(value) >= stop and all(x == value[-1] for x in value[-stop:]): break
这段逻辑中all(x == value[-1] for x in value[-stop:])会自动校验最后stop个元素是不是全部相等,不管元素值是多少,完全适配任意随机数生成场景。
原嵌套循环写法修复
如果你坚持要使用嵌套循环的写法,可以新增标志位判断是否满足终止条件:
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 stop_flag = False # 用set去重,避免遍历重复值降低效率 for num in set(value): if value[-stop:] == [num] * stop: stop_flag = True break # 标志位为真时终止外层循环 if stop_flag: break
内容的提问来源于stack exchange,提问作者Carlos Eduardo Corpus
相关产品推荐
相关产品推荐

