# ### 带权随机算法
def weight_choice(weight): """ :param weight: list对应的权重序列 :return:选取的值在原列表里的索引 """ t = random.randint(0, sum(weight) - 1) for index, val in enumerate(weight): t -= val if t < 0: return index # 假设weight=[20,30,50] # 即 [0,20)为第一个区间;[20,50)为第二个区间;[50,100)为第三个区间; t = random.randint(0, 100) # 从[0,100)中随机取一个数,假设t=49 for i, val in enumerate([20,30,50]): # i和val是0,20; 1,30; 2,50 t -= 20 # 得到t=29 --> t-=30 得到t=-1,则返回 i=1,即随机结果落在第二个区间