遍历随机生成数组的最优方法 3个随机数数组求和≤21的更优实现方案
实现方案优化
原代码逻辑正确,存在的可优化点主要是冗余变量冗余逻辑,以及高并发场景下的性能损耗,以下是不同场景下的最优实现:
单组生成场景(可读性优先)
适合仅需要生成1组符合要求的数组的场景,代码简洁易维护,性能完全满足需求:
import numpy as np rng = np.random.default_rng() while True: rints = rng.integers(1, 11, size=3) if rints.sum() <= 21: break print(rints, rints.sum())
优化点说明:
- 去掉了无意义的占位判断变量
a,直接用while True表述循环逻辑,代码可读性更强 - 直接调用numpy数组自带的
sum()方法,省略冗余的np.sum()调用 - 删除不必要的条件判断括号,符合PEP8编码规范
大量生成场景(性能优先)
如果你需要生成几十上百组符合要求的数组,推荐用批量向量化方案,利用numpy的并行运算能力减少Python层循环开销,性能提升明显:
import numpy as np rng = np.random.default_rng() batch_size = 100 # 可根据需要生成的样本量调整大小 while True: # 一次性生成batch_size组随机数 batch = rng.integers(1, 11, size=(batch_size, 3)) # 批量计算每组的和 sum_arr = batch.sum(axis=1) # 筛选所有符合条件的组 valid_samples = batch[sum_arr <= 21] if len(valid_samples) > 0: # 取第一组符合要求的结果,需要多组的话直接取valid_samples即可 rints = valid_samples[0] break print(rints, rints.sum())
优化点说明:
- 把多次Python层的循环替换为numpy的向量化操作,生成1000组以上样本时性能是单组循环的10倍以上
- 一次批量生成即可拿到所有符合要求的样本,不需要重复执行随机数生成逻辑
轻量无依赖场景
如果你的项目不需要依赖numpy做其他运算,用Python标准库random实现更轻量,启动速度更快:
import random while True: rints = [random.randint(1, 10) for _ in range(3)] if sum(rints) <= 21: break print(rints, sum(rints))
内容的提问来源于stack exchange,提问作者bakiargento
相关产品推荐
相关产品推荐

