选择随机值但选择每个值的确切次数

时间:2017-10-11 18:50:48

标签: python

我是python的新手。 我列出了四个值 我需要从这个列表中选择随机值32次 但是,我需要将每个值精确选择8次。

到目前为止,我用过这个:

import random
my_list=['a','b','c','d']
for i in range(1,33):
    selection=random.choice(my_list)
    print("{} selection: {}".format(i,selection))

这是有效的 - 但是如何让它给我每个值8次呢?

感谢您的帮助。

5 个答案:

答案 0 :(得分:7)

我会在其中构建一个包含所需元素的列表,然后将其随机播放。

import random
my_list = ['a', 'b', 'c', 'd'] * 8
random.shuffle(my_list)

现在my_list按随机顺序包含32个元素,每个唯一元素出现八次。

答案 1 :(得分:4)

您可以先将列表乘以8次

>>> result = my_list*8

然后random.shuffle列出并str.join

>>> random.shuffle(result)
>>> print(''.join(result))
aaabdddbcdbcbabadcccddabbacbaccd

答案 2 :(得分:1)

为了确保为列表中的每个元素选择8次每个值,您需要为每个元素设置一个计数器。您需要跟踪每个元素的选择次数。

每次选择该字母时,都会随机选择将其唯一计数器递增1.当您再次运行随机选择时,您需要检查该值是否已被选中8次。如果它抛出该选择并再次运行随机选择。然后,您需要检查并查看其随机返回的结果是否已被选中8次。

答案 3 :(得分:1)

编写一个嵌套的for循环,其中外部for循环运行8次,内部for循环运行4次以获取数字列表。然后在列表中每次for循环运行时删除值。

...
Dim wbkInput As Workbook   ' ### New
Dim wbkOutput As Workbook
... 
'Set references up-front
lngDateCol = 1 '<~ we know dates are in column A
set wbkInput = ActiveWorkbook ' ### New - **before** creating the new workbook
Set wbkOutput = Workbooks.Add

For Each wks in wbkInput.Worksheets  ' ### Don't use ActiveWorkbook from here on down
    ...

这是我怎么做的,可能不是最有效的方法,但你明白了。

答案 4 :(得分:1)

使用乘法运算符创建每个元素的副本,然后使用random.shuffle随机化列表元素:

>>> import random
>>> timesToSelectValue=8
>>> my_list=['a','b','c','d']
>>> new_list=my_list*timesToSelectValue
>>> random.shuffle(new_list)
>>> print(new_list)
['d', 'b', 'd', 'a', 'c', 'b', 'b', 'a', 'b', 'd', 'd', 'b', 'c', 'b', 'a', 'b', 'c', 'd', 'd', 'c', 'a', 'a', 'b', 'c', 'a', 'c', 'd', 'c', 'd', 'c', 'a', 'a']

new_list现在是随机顺序,并且my_list中每个元素恰好包含8个:

>>> for i in my_list:
...     print("count {}={}".format(i,new_list.count(i)))
...
count a=8
count b=8
count c=8
count d=8