优雅的方式来创建随机0和1的列表

时间:2017-12-31 11:48:07

标签: python random list-comprehension

model = [random.randint(0,1) if model.count(0) < 20 else 1 for _ in range(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)

我只是喜欢列表理解,这让我更容易使用NLP和群发。所以找到新功能会很酷。

1 个答案:

答案 0 :(得分:1)

列表理解很好,但它们并不适合所有场景。在您的情况下,编写明确的for循环更有意义。

但是,您可以使用random.shuffle来更有效地获得类似结果。如果您在结果列表中同时需要01为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]