Dan*_*ain 2 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)
Run Code Online (Sandbox Code Playgroud)
我只是喜欢列表理解,它让我更容易使用 NLP 和大量的工作。所以找到新功能会很酷。
List Comprehension很好,但并不适合所有场景。在您的情况下,编写显式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]
Run Code Online (Sandbox Code Playgroud)
但是,如果您希望的计数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]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5589 次 |
最近记录: |