Python从List中随机取值的四种方法及加权场景实现
本文详细介绍Python中从列表随机取值的四种方法。推荐random.choice()获取单个元素,random.sample()抽取多个元素,以及使用random.randint()手动索引。此外,针对抽奖等需要控制概率的特殊场景,深入解析random.choices()结合权重参数的应用,实现非均匀分布的随机选择。
Python List随机取值基础方法
第一种方法(推荐)
该方法适用于需要随机获取列表中的单个值,并返回该单一元素的情况。
方法一:使用random.choice()获取单值
import random
list1 = ['佛山', '南宁', '北海', '杭州', '南昌', '厦门', '温州']
a = random.choice(list1)
print(a)
# 返回一个值
第二种方法
此方法适用于需要从列表中随机抽取一组元素,并返回包含这些元素的列表对象。
方法二:使用random.sample()抽取多值
import random
list1 = ['佛山', '南宁', '北海', '杭州', '南昌', '厦门', '温州']
# 随机返回只有一个值的list
a = random.sample(list1, 1)
# 随机返回只有一个值的list
b = random.sample(list1, 3)
print(a)
print(b)
# 返回list
第三种方法(不推荐,效率较低)
通过自定义逻辑实现的方法。
方法三:使用random.randint()手动索引
import random
list1 = ['佛山', '南宁', '北海', '杭州', '南昌', '厦门', '温州']
ln = len(list1)
a = list1[random.randint(0, ln)]
print(a)
第四种方法(适用于特殊场景)
以下通过具体场景举例说明:例如抽奖活动,从10人中随机抽取1名获奖者。虽然理论上每人概率均为十分之一,但能否在代码层面调整,使特定人员的中奖概率更高?
答案是肯定的,可以通过加权随机实现。
具体代码实现如下:
特殊场景:基于权重的随机选择
In [1]: import random
# 这里给李四个权重为1,看看有什么结果
In [2]: a = {"张三": 0, "李四":1, "王五":0, "赵七": 0, "钱八": 0}
# 取5次, 每次都是李四,
In [3]: random.choices(list(a.keys()), weights=list(a.values()), k=5)
Out[3]: ['李四', '李四', '李四', '李四', '李四']
# 取1次, 当然就是李四了
In [4]: random.choices(list(a.keys()), weights=list(a.values()), k=1)
Out[4]: ['李四']
# 改下权重:李四和赵七都为1
In [5]: a = {"张三": 0, "李四":1, "王五":0, "赵七": 1, "钱八": 0}
# 取5次,也就是李四和赵七两个人, 没有其它人什么事了
In [6]: random.choices(list(a.keys()), weights=list(a.values()), k=5)
Out[6]: ['李四', '李四', '李四', '赵七', '李四']
In [7]: random.choices(list(a.keys()), weights=list(a.values()), k=5)
Out[7]: ['赵七', '李四', '李四', '李四', '赵七']
In [8]: random.choices(list(a.keys()), weights=list(a.values()), k=5)
Out[8]: ['李四', '赵七', '李四', '李四', '赵七']
# 再改一下, 每个人的权重都不一样,
In [9]: a = {"张三": 2, "李四":1, "王五":3, "赵七": 1, "钱八": 4}
# 多执行几次, 会发现每个人都可能会出现, 只是出现的概率完全不一样了, 钱八出现次数最多.
In [10]: random.choices(list(a.keys()), weights=list(a.values()), k=2)
Out[10]: ['王五', '赵七']
In [11]: random.choices(list(a.keys()), weights=list(a.values()), k=2)
Out[11]: ['王五', '王五']
至此,关于Python从List中随机取值的方法介绍完毕。如需了解更多Python List随机取值相关内容,欢迎搜索本站历史文章或继续阅读后续文章,希望大家多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









