2012-09-04 53 views
1

可能重复获取随机元素:
Weighted random selection with and without replacement通过优先

我累作出所有决定由我自己下一步怎么办。我想让电脑做到这一点。 我只写东西并给每一个优先,电脑用这些优先顺序随机选取一个元素。

所以,我做了这个文件(TSV):

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

“工作” 应该有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) 

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

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

+0

我喜欢[这个答案](http://stackoverflow.com/a/3679747/487339)。 – DSM

+0

不知道这是“加权” – Qiao

回答

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) 
+0

我打算建议,直到我意识到可能有更好的解决方案在重复。 – mgilson

+0

谢谢,很容易得到它。最后我会开始做事。只需要对优先级和任务进行一些调整) – Qiao