Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 选择随机值,但每个值的选择次数精确_Python - Fatal编程技术网

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次呢 谢谢你的

我是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次呢


谢谢你的帮助。

我会建立一个包含所需元素的列表,然后将其洗牌

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