如何使random.choice包括不选择?

时间:2017-08-11 16:15:10

标签: python random

我尝试随机选择列表中的项目或不选择任何内容。

例如,我想选择“a”,“b”或空白(不是它们)。 有没有办法做到这一点?

或者我应该制作random.choice('a','b','')并弹出这个('')?

import random

foo = ['a', 'b']
print(random.choice(foo))

提前致谢。

2 个答案:

答案 0 :(得分:1)

如果您希望将列表传递给函数random.choice而不通过添加空白选项进行更改,然后将其删除,则可以使用以下方式:

import random

foo = ['a','b']

print(random.choice(foo+['']))

print(foo) # >>> ['a','b']

答案 1 :(得分:1)

有很多方法可以做到这一点。您建议的方式(创建新列表,包含前一个列表的所有项目,加上一个表示None的项目,并在新列表中使用random.choice)是一种有效的方法。

这样,对于列表['a', 'b'],您将获得:

  • 获得'a'
  • 的概率的1/3
  • 获得'b'
  • 的概率的1/3
  • 获得''(无选择)的概率的1/3。

我更愿意使用Python None来表示缺少价值。

my_options = ['a', 'b']
selection = random.choice(my_options + [None])

或者,如果您希望None的概率为某个值p,然后所有n个选择接受(1-p)/ n概率被选中,您可以像这样写:

my_options = ['a', 'b']
pnone = 0.5
if random.random() < pnone:
    selection = None
else:
    selection = random.choice(my_options)

如果你不太关心概率,我会选择第一种方式(这就是你的建议)。