我尝试随机选择列表中的项目或不选择任何内容。
例如,我想选择“a”,“b”或空白(不是它们)。 有没有办法做到这一点?
或者我应该制作random.choice('a','b','')
并弹出这个('')?
import random
foo = ['a', 'b']
print(random.choice(foo))
提前致谢。
答案 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'
'b'
''
(无选择)的概率的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)
如果你不太关心概率,我会选择第一种方式(这就是你的建议)。