You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遍历随机生成数组的最优方法 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 20:06:03