Python如何高效生成带权重列表以调整随机元素选取概率?
实现带权重概率列表的简洁写法
你可以通过列表加法结合列表乘法实现符合需求的内联写法,解决之前字符串乘法导致的问题:
unfair_list = ["A", "B"] + ["C"] * 3
执行后得到的结果为:["A", "B", "C", "C", "C"],完全满足你的需求。
如果需要处理更复杂的多元素权重配置,还可以用列表推导式写一行代码:
unfair_list = [item for item, cnt in [("A",1), ("B",1), ("C",3)] for _ in range(cnt)]
这种写法扩展性更强,后续调整元素权重只需修改元组内的数字即可。
为什么你之前的写法无效?
3 * "C" 是字符串乘法,会把字符串"C"重复3次拼接成单个字符串"CCC",而非生成三个独立的列表元素。换成["C"] * 3后,是对列表进行乘法操作,会生成包含3个"C"元素的新列表,再和前面的列表相加就能得到正确结果。
内容的提问来源于stack exchange,提问作者crazysantaclaus
相关产品推荐
相关产品推荐

