按给定优先级获取随机元素

时间:2012-09-04 14:41:58

标签: python random

  

可能重复:
  Weighted random selection with and without replacement

我厌倦了自己决定下一步做什么。我想让电脑去做。 我只写东西并优先考虑每个,计算机用随机元素选择一个优先级。

所以,我制作了这个文件(tsv):

3   work A
2   work B
1   work C
1   laundry
1   nothing

“工作A”应该以38%的概率发生。 “没什么” - 13%等。
计算机应该算上这一切并对我说:do ___

我可以阅读并获得每件事的百分比。但我无法弄清楚如何选择具有这些百分比的东西。

import csv

# reading
file = open('do.txt', mode='r', encoding='utf-8')
tsv_file = csv.reader(file, delimiter='\t')

# total priority
priority_total = 0
for work in tsv_file:
    priority_total = priority_total + int(work[0])

?????

print(do_this)

这样做的方法是什么?是否存在具有给定概率的随机选择函数?

我真的需要这个来停止拖延并开始做事。

1 个答案:

答案 0 :(得分:3)

嗯,一个简单的方法是创建一个任务列表,但是将每个任务多次添加到列表中等于其优先级。

因此,在加载文件后,列表将如下所示:

['work A', 'work A', 'work A', 'work B', 'work B', 'work C', 'laundry', 'nothing']

然后您可以使用random.choice来选择随机元素。

task_list = []
for prio, work in tsv_file:
    task_list += [work] * int(prio)

do_this = random.choice(task_list)