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

如何用Python实现按给定概率从SKU列表中随机选取指定数量商品?

嗨,我来帮你把Excel里的拣货清单逻辑搬到Python里,一步步来很简单的!

首先,先帮你拆解一下你找到的那个random_pick函数——它其实完美实现了你Excel公式的核心逻辑:

Excel里是生成一个0-1的随机数,然后找第一个累积概率大于这个随机数的SKU;这个Python函数也是一样:生成随机数x,然后遍历SKU和对应的单个概率,累加得到累积概率,一旦累加值超过x,就返回当前SKU,和你的Excel公式逻辑完全匹配。

接下来分三步实现你的需求:

1. 把Excel数据读进Python

首先你需要把Excel里的SKU列表和对应的概率(注意是单个SKU的概率,不是累积概率,函数会自己累加)读取到Python里。推荐用pandas来处理Excel,代码大概是这样:

import pandas as pd

# 替换成你的Excel文件路径和列名
df = pd.read_excel("你的库存数据.xlsx")
sku_list = df["SKU列的名称"].tolist()  # 比如你Excel里SKU在A列,就填"A"或者列的实际名称
probabilities = df["单个概率列的名称"].tolist()  # 对应你计算的每个SKU的概率列

⚠️ 注意:要保证SKU列表和概率列表的顺序完全和Excel一致(按销量从高到低排序),而且所有概率的总和要接近1(允许微小的浮点误差)。

2. 批量生成20个SKU的拣货清单

有了数据之后,只需要循环调用random_pick函数20次就行,用列表推导式很简洁:

import random

def random_pick(some_list, probabilities):
    x = random.uniform(0, 1)
    cumulative_probability = 0.0
    for item, item_probability in zip(some_list, probabilities):
        cumulative_probability += item_probability
        if x < cumulative_probability:
            break
    return item

# 生成20个SKU的拣货清单
pick_list = [random_pick(sku_list, probabilities) for _ in range(20)]

# 打印结果看看
print("生成的拣货清单:")
for sku in pick_list:
    print(sku)

3. (可选)用累积概率优化效率

如果你已经有了Excel里算好的累积概率列表,可以用bisect模块来优化速度(尤其是数据量很大的时候),逻辑和Excel的COUNTIF完全对齐:

import bisect
import random

def random_pick_with_cumulative(some_list, cumulative_probs):
    x = random.uniform(0, 1)
    # bisect_right找到第一个大于x的累积概率的索引,和Excel的COUNTIF结果+1逻辑一致
    index = bisect.bisect_right(cumulative_probs, x)
    return some_list[index]

# 假设你已经把Excel里的累积概率列读成了cumulative_probabilities列表
pick_list = [random_pick_with_cumulative(sku_list, cumulative_probabilities) for _ in range(20)]

小提示

  • 如果需要避免重复选取同一个SKU,可以在生成的时候判断是否已加入列表,但你的Excel公式是允许重复的,所以默认和Excel保持一致;
  • 可以多运行几次看看结果,销量高的SKU(概率大)应该会更频繁地被选中,这就说明逻辑是对的。

内容的提问来源于stack exchange,提问作者Karim.C

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:09:22