生成带权重的重复状态列表技术实现问询
实现带权重的状态序列重复列表方案
首先,我理解你的需求是:基于已有的多个状态序列(l1到l7)组成的Status列表,按照指定的权重(每个序列的重复次数或比例)生成一个包含大量重复序列的最终列表,同时保持每个序列内部的原有顺序。
下面提供两种常用的实现思路,基于Python来完成:
方案1:按指定重复次数(权重为具体次数)生成
如果你的权重是明确的重复次数(比如希望l1重复15000次,l2重复10000次,其他序列按需设置),可以直接通过循环批量拼接实现:
代码示例
# 先定义你的状态序列(示例用l1-l3,l4-l7可自行补充) l1 = ['InitialRequest','Approved','WorkStarted','OnHold','InProgress','OnHold','InProgress','Completed'] l2 = ['InitialRequest','Approved','WorkStarted','OnHold','OnHold','OnHold','OnHold','Cancelled'] l3 = ['InitialRequest','Approved','WorkStarted','InProgress','InProgress','InProgress','InProgress','Completed'] Status = [l1, l2, l3] # 包含所有7个序列的列表 # 定义权重:每个元素对应Status中序列的重复次数 # 比如l1重复15000次,l2重复12000次,l3重复8000次,后续l4-l7继续补充 weights = [15000, 12000, 8000] # 生成最终结果列表 final_list = [] for seq, repeat_count in zip(Status, weights): # 注意:用seq.copy()创建新副本,避免所有重复项引用同一个列表对象 final_list.extend([seq.copy() for _ in range(repeat_count)])
关键注意点
- 因为状态序列是可变的列表对象,必须使用
seq.copy()或list(seq)创建副本,否则所有重复的序列都会指向同一个内存地址,后续修改其中一个会影响所有重复项。 - 使用
extend()批量添加比逐个append()效率更高,尤其适合大数量级的重复场景。
方案2:按比例权重生成(总数量固定)
如果你的需求是按比例分配(比如l1占总数据的30%,l2占25%等),可以先根据总目标数量计算每个序列的重复次数,再生成结果:
代码示例
# 同样先定义状态序列和Status列表(同方案1) l1 = ['InitialRequest','Approved','WorkStarted','OnHold','InProgress','OnHold','InProgress','Completed'] l2 = ['InitialRequest','Approved','WorkStarted','OnHold','OnHold','OnHold','OnHold','Cancelled'] l3 = ['InitialRequest','Approved','WorkStarted','InProgress','InProgress','InProgress','InProgress','Completed'] Status = [l1, l2, l3] # 总目标记录数 total_records = 105000 # 比如原需求7个序列各15000次的总数量 # 比例权重:每个元素对应序列的占比,总和需接近1(允许微小误差) weight_ratios = [0.3, 0.25, 0.45] # 对应l1、l2、l3的占比,后续补充l4-l7的比例 # 计算每个序列的重复次数 repeat_counts = [int(total_records * ratio) for ratio in weight_ratios] # 修正四舍五入导致的总数量误差,把剩余记录数加到最后一个序列上 repeat_counts[-1] += total_records - sum(repeat_counts) # 生成最终列表 final_list = [seq.copy() for seq, count in zip(Status, repeat_counts) for _ in range(count)]
可选优化
如果需要打乱最终列表的顺序(比如避免相同序列连续出现),可以在生成后添加:
import random random.shuffle(final_list)
内容的提问来源于stack exchange,提问作者IndigoChild
相关产品推荐
相关产品推荐

