2017-08-11 76 views
1

我尝试在列表中随机选择一个项目或不选择任何项目。我如何使random.choice包含不选择?

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

或者我应该只是让random.choice('a','b','')和弹出('')出?

import random 

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

在此先感谢。

+0

你好,也许它可以帮助你https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.choice.html –

回答

1

如果你想你的列表传递给函数random.choice没有通过添加空白选择改变它,之后将其删除,你可以用这样的方式:

import random 

foo = ['a','b'] 

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

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

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

这样一来,对于清单['a', 'b'],您将获得:

  • 1/3概率变得越来越得到'''b'
  • 1/3的概率'a'
  • 1/3的概率(无选择)。

我宁愿用Python的None来表示没有价值。

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

另外,如果说你想的None的概率是一些p值,然后将所有接收(1-p)的n个选择/ N的概率被拾起,你可以写像这样:

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

如果你不太在意概率,我会选择第一种方法(这是你的建议)。

+0

非常感谢我回答我的问题! 如果选择了[无],那么[无]仍然有它的位置,对吧? 我的意思是,实际上我想插入包括none的项目到其他列表中。 在这种情况下,我试图编写这样的代码。 富= [ '一', 'B'] 选择= random.choice(FOO + [无]) 右= [ '一', 'B'] right.insert(1,选择) 打印正确 然后,其中一个结果是['a',None,'b'] 这里,right [1] = None,而不是'b',对吗? –

+0

是的,在这种情况下,“right [1]”将是“None”。 – Odysseas

+0

@HyunkyungKoo当你调用'right.insert(1,choice)'时,'choice'的值被插入'right'里面的索引1,'a'之后,'b'之前。无论“选择”具有什么价值,都会发生这种情况。因此,最后'right'的3个可能结果是'['a','a','b']','['a',b','b']'和'['a',无, 'b']'。所有三个列表的长度都是3。在Python中,列表可以保存不同类型的值,包括None值。 – Odysseas