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和群发。所以找到新功能会很酷。
答案 0 :(得分:1)
列表理解很好,但它们并不适合所有场景。在您的情况下,编写明确的for
循环更有意义。
但是,您可以使用random.shuffle
来更有效地获得类似结果。如果您在结果列表中同时需要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]