Python 创建随机0和1列表的优雅方法

Python 创建随机0和1列表的优雅方法,python,random,list-comprehension,Python,Random,List Comprehension,model=[random.randint(0,1)如果model.count(0)

model=[random.randint(0,1)如果model.count(0)<20,否则1用于范围(40)]

当然
model.count(0)
是错误的。 这里我们选择正确的代码,但没有列表理解

model = list()
for i in range(40):
   if model.count(0) < 20:
       model.append(random.randint(0,1))
   else:
       model.append(1)
model=list()
对于范围(40)内的i:
如果型号计数(0)<20:
model.append(random.randint(0,1))
其他:
模型.附加(1)
我只是喜欢列表理解,它让我更容易使用NLP和体量。因此,找到新功能会很酷。

列表理解很好,但并不适用于所有场景。在您的情况下,为循环编写显式的
,更有意义

但是,为了更有效地获得类似的结果,您可以使用。如果需要在结果列表中同时将
0
1
计数为20,则可以执行以下操作:

>>> import random
>>> my_list = [0]*20 + [1]*20

>>> random.shuffle(my_list)
>>> my_list
[0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0]
但是,如果希望
0
的计数在0-20之间随机(当前代码正在执行此操作),则可以修改上述逻辑,如下所示:

>>> zero_count = random.randint(0, 20)
>>> one_count = 40 - zero_count

>>> my_list = [0]*zero_count + [1]*one_count
>>> random.shuffle(my_list)
>>> my_list
[1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1]

很酷,但我需要范围内的随机零数(20),但使用shuffle时,我总是得到20个零和20个一:),所以列表必须包含0到20个零,其余一个请检查我最近添加的第二个代码片段@DanielFedrain解释相同场景谢谢支持!