我是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次呢?
感谢您的帮助。
答案 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