从较小的原始列表返回N个随机项

时间:2012-08-17 15:13:46

标签: python random

我很惊讶我没有办法在没有循环的情况下做到这一点,因为这似乎是一个相当标准的问题。
在python中工作, 我有colors = ["red","green","blue"]并且我想以随机顺序将这些元素放入长度为N的列表中。现在我正在使用:

import random
colors = ["red","green","blue"]
otherList = []

for i in range (10):  # N=10 
    otherList.append(random.choice(colors))

这将返回:otherList = ["red","green","green","green","blue","green","red","green","green","blue"],这正是我想要的。我只是想找一个比较习惯的方式吗?有任何想法吗?看起来像random.sample可能就是答案,但我没有在文档中看到任何符合我需求的内容。

2 个答案:

答案 0 :(得分:6)

您可以使用列表理解:

[random.choice(colors) for i in range(10)] #xrange for python2 compatability

random.sample()通过一些体操:

nrandom = 10
random.sample( colors*(nrandom//len(colors)+1), nrandom )  

虽然我认为这不比列表理解更好......

答案 1 :(得分:2)

>>> import random
>>> colors = ["red","green","blue"]
>>> [random.choice(colors) for i in range(10)]
['green', 'green', 'blue', 'red', 'red', 'red', 'green', 'red', 'green', 'blue']