Python 选择随机值,但每个值的选择次数精确
我是python新手。 我有四个值的列表。Python 选择随机值,但每个值的选择次数精确,python,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次呢 谢谢你的
我需要在此列表中选择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次呢
谢谢你的帮助。我会建立一个包含所需元素的列表,然后将其洗牌
import random
my_list = ['a', 'b', 'c', 'd'] * 8
random.shuffle(my_list)
现在,我的列表包含32个随机顺序的元素,每个唯一元素出现8次。为了确保列表中每个元素的每个值都被8次选择,您需要为每个元素设置一个计数器。您需要跟踪每个元素被选择的次数
每次随机选择该选项时,将其唯一计数器增加1。当您再次运行随机选择时,您需要检查该值是否已被选择8次。如果它已抛出该选择并再次运行随机选择。然后,您需要检查并查看其随机返回的结果是否已经被选中8次。您可以先将列表乘以8次
>>> result = my_list*8
然后是那个列表和它
编写一个嵌套的for循环,其中对于数字列表,外部for循环运行8次,内部for循环运行4次。然后在列表中,每次运行for循环时删除该值
for i in range(1,8):
my_list = ['a','b','c','d']
for j in range(1,4):
rand = randint(1,(5-j))
print(rand)
my_list.remove([rand])
这就是我要做的,可能不是最有效的方法,但你明白了 使用乘法运算符创建每个元素的副本,然后使用以随机化列表元素:
>>> 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
将值精确地选择8次是什么意思?你能告诉我们你期望的输出是什么吗?将列表连接到它自身8次,然后将其洗牌。你需要一个包含所有这些值的列表的随机排列(4x8)。因此,创建这个列表并将其实现(显然python已经为您实现了它…),这项任务确实过于复杂了。看看其他答案:“是的,我最近做了很多C代码,很难记住Python有多惊人。转到C++黑暗面,我们在
@CoryKramer Good point:)排序
最初用于演示新列表
每个我的列表
元素正好有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