2012-09-14 70 views
2

我想有多個變量設置爲列表中的隨機元素。現在我這樣做有點像這樣:將多個變量分配給列表中的隨機項。 Python

from random import choice 

list = ["a", "b"] 
foo = choice(list) 
bar = choice(list) 
baz = choice(list) #etc. 

我敢肯定有更好的方法來做到這一點。我試圖

foo = bar = baz = choice(list) 

但是,當然它只是他們都設置爲隨機choosen一旦列表中的單個元素,我想每個變量設置爲新random.choice。

回答

1

像@Alex建議,但沒有得到清單,結果是:

foo, bar, baz = [random.choice(list) for i in range(3)] 
7

您可以使用random.sample(),如果你想從列表中摘下了三個不同元素(即foo是永遠等於bar,這可能不是你想要的):

foo, bar, baz = random.sample(l, 3) 

我改名爲你變量爲l,因爲list是內置類型。意外覆蓋它不會很漂亮。

+0

用'sample'的問題是,它的工作原理是「沒有替換」,即當你需要更多的樣本時,它不起作用,而不是原始列表中的元素。請參閱http://docs.python.org/library/random.html#random.sample當然,這可能適用於這種特殊情況(取決於數據集和需求),但值得注意。 – kgr

+0

@kgr:謝謝,我補充說。 – Blender

+0

sample()返回ValueError:「樣本大於總體」在我的情況,因爲我有更多的變量比列表中的元素。 – M830078h

5

也許創建一個帶選擇輸出的列表?類似於

choices = [choice(list) for i in range(10)] 

其中您有10個元素?另外我會將list重命名爲其他內容。

+0

正確地閱讀問題。 – Blender

1

我會考慮把他們在一個dict然後使用somedict['foo']風格訪問:

from random import choice 

CHOICES = ('a', 'b') 
choices = {name: choice(CHOICES) for name in ['foo', 'bar', 'baz']} 
相關問題