python 从list中随机取值的方法

第一种方法(推荐)

适用于随机取一个值, 返回一个值

import random
list1 = [\'佛山\', \'南宁\', \'北海\', \'杭州\', \'南昌\', \'厦门\', \'温州\']
a = random.choice(list1)
print(a)
# 返回一个值

第二种方法

适用于随机取一组值, 返回一个list

import random
list1 = [\'佛山\', \'南宁\', \'北海\', \'杭州\', \'南昌\', \'厦门\', \'温州\']
# 随机返回只有一个值的list
a = random.sample(list1, 1) 

# 随机返回只有一个值的list
b = random.sample(list1, 3) 
print(a)
print(b)
# 返回list

第三种方法(不推荐,效率太慢)

自写的方法

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]: [\'王五\', \'王五\']
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容