2012-09-14 68 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']} 
相关问题