我嘗試在列表中隨機選擇一個項目或不選擇任何項目。我如何使random.choice包含不選擇?
例如,我想選擇「a」,「b」或空白(均不是)。 有沒有辦法做到這一點?
或者我應該只是讓random.choice('a','b','')
和彈出('')出?
import random
foo = ['a', 'b']
print(random.choice(foo))
在此先感謝。
我嘗試在列表中隨機選擇一個項目或不選擇任何項目。我如何使random.choice包含不選擇?
例如,我想選擇「a」,「b」或空白(均不是)。 有沒有辦法做到這一點?
或者我應該只是讓random.choice('a','b','')
和彈出('')出?
import random
foo = ['a', 'b']
print(random.choice(foo))
在此先感謝。
如果你想你的列表傳遞給函數random.choice
沒有通過添加空白選擇改變它,之後將其刪除,你可以用這樣的方式:
import random
foo = ['a','b']
print(random.choice(foo+['']))
print(foo) # >>> ['a','b']
有很多的方式來做這個。您建議的方式(創建一個新列表,包含上一個列表中的所有項目,加上一個代表None的項目,並在新列表中使用random.choice
)是一種有效的方法。
這樣一來,對於清單['a', 'b']
,您將獲得:
''
的'b'
'a'
我寧願用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)
如果你不太在意概率,我會選擇第一種方法(這是你的建議)。
非常感謝我回答我的問題! 如果選擇了[無],那麼[無]仍然有它的位置,對吧? 我的意思是,實際上我想插入包括none的項目到其他列表中。 在這種情況下,我試圖編寫這樣的代碼。 富= [ '一', 'B'] 選擇= random.choice(FOO + [無]) 右= [ '一', 'B'] right.insert(1,選擇) 打印正確 然後,其中一個結果是['a',None,'b'] 這裏,right [1] = None,而不是'b',對嗎? –
是的,在這種情況下,「right [1]」將是「None」。 – Odysseas
@HyunkyungKoo當你調用'right.insert(1,choice)'時,'choice'的值被插入'right'裏面的索引1,'a'之後,'b'之前。無論「選擇」具有什麼價值,都會發生這種情況。因此,最後'right'的3個可能結果是'['a','a','b']','['a',b','b']'和'['a',無, 'b']'。所有三個列表的長度都是3。在Python中,列表可以保存不同類型的值,包括None值。 – Odysseas
你好,也許它可以幫助你https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.choice.html –