Python中的random模块可以用来生成伪随机数。在这个模块中,choices()函数可以从给定的序列中随机选取元素。这个函数可以用来模拟实际场景,比如抽奖,随机分配任务等等。
choices()函数的语法如下:
random.choices(population, weights=None, *, cum_weights=None, k=1)
其中:
population
:必须是一个序列,可以是列表,元组,字符串等等。表示要从中选取元素的序列。weights
:可选参数。必须是一个数字序列,长度必须和population相同。表示每个元素被选中的概率,可以是小数,但必须大于等于0。cum_weights
:可选参数。必须是一个数字序列,长度必须和population相同。表示累计权重,即前n个元素被选中的概率,如果指定了cum_weights,那么不能同时指定weights。k
:可选参数。表示要选取的元素个数,默认值是1。
当参数中只指定population时,函数会从中等概率地选取1个元素,并返回一个列表。下面是一个简单的例子:
import random
# 从1-10中随机选取一个数
num = random.choices(range(1, 11))
print(num)
运行结果可能是:
[4]
当然,你也可以指定元素的权重来控制被选中的概率。例如:
import random
# 从1-10中随机选取一个数,2被选中的概率是1/3,其他数字被选中的概率是1/7
num = random.choices(range(1, 11), weights=[1, 3, 1, 1, 1, 1, 1, 1, 1, 1])
print(num)
运行结果可能是:
[2]
除了从序列中选取元素外,choices()函数还可以用来做随机采样和随机洗牌等操作。接下来给出两个实例。
实例1:使用choices()函数实现随机采样
假设我们有一个大的数据集,我们想从中随机选取一部分数据进行训练,一部分数据进行测试。这时可以使用choices()函数来实现随机采样。下面是一个例子,首先生成100个数据,然后随机选取10个数据作为测试集。
import random
data = list(range(0, 100))
test_set = random.choices(data, k=10)
train_set = [x for x in data if x not in test_set]
print("测试集:", test_set)
print("训练集:", train_set)
运行结果可能是:
测试集: [78, 91, 70, 12, 56, 11, 16, 10, 49, 61]
训练集: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 54, 55, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 92, 93, 94, 95, 96, 97, 98, 99]
实例2:使用choices()函数实现随机洗牌
假设我们有一副扑克牌,我们想把它洗牌后重新排列。这时可以使用choices()函数来实现随机洗牌。下面是一个例子,首先生成一副扑克牌,然后随机洗牌。
import random
# 生成一副扑克牌
suits = ['♠', '♥', '♦', '♣']
ranks = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']
deck = [rank + suit for suit in suits for rank in ranks]
# 洗牌
random.shuffle(deck)
print(deck)
运行结果可能是:
['7♦', 'K♦', 'A♣', 'A♦', 'J♣', '4♦', '9♥', 'K♥', '2♥', '2♠', 'K♣', '4♠', '8♦', '5♣', 'J♠', '5♠', 'Q♦', 'Q♠', '6♣', '10♠', '7♠', '9♣', 'A♥', '6♥', '6♠', '8♠', 'J♦', 'Q♣', '9♠', '3♣', '7♥', 'K♠', '2♣', '3♠', '10♥', '3♥', '4♥', '5♥', '8♥', '10♣']
通过以上两个例子,我们可以看到choices()函数的用法非常灵活,可以用来解决很多实际问题。
本文链接:https://my.lmcjl.com/post/18914.html
展开阅读全文
4 评论