提问人:beginner_python 提问时间:3/24/2021 更新时间:3/24/2021 访问量:469
如何获取 n 长度的布尔数组,条件为 X 数量的“True”值
How to get n-length Boolean array with conditions on X amount of 'True' values
问:
我有以下具有二元结果(即 1 或 0)的事件列表:
events=['A', 'B', 'C']
outcomes=[True,False]
在每种情况下,这些结果中只有一个可以为 True。有没有办法得到一个数组,比如:
array=([True,False,False],[False,True,False], [False,False,True])
我知道我可以将 Itertools 产品与重复一起使用,但这会在数组中产生不需要的场景,例如 [True,True,True] 等。理想情况下,我不必过滤它,因为我希望我的“事件”列表比上面的要长得多。
有人有什么想法吗?我可以在数组中有 1 或 0 个值,我不大惊小怪。
答:
0赞
Axe319
3/24/2021
#1
您可以创建一个生成器来自己完成。
def one_true(length):
i = 0
while i < length:
lst = [False] * length
lst[i] = True
yield lst
i +=1
print(list(one_true(3)))
这似乎相当微不足道,因为您只需要在数组中“爬行”。True
如果您想包含它们都存在的案例,只需在末尾添加即可。False
yield [False] * length
def one_true(length):
i = 0
while i < length:
lst = [False] * length
lst[i] = True
yield lst
i +=1
yield [False] * length
print(list(one_true(3)))
从你的例子:
events = ['A', 'B', 'C']
print(list(one_true(len(events))))
或者,如果你想更简洁,你可以使用带有自定义函数的理解。
def insert_true(lst, index):
lst[index] = True
return lst
events = ['A', 'B', 'C']
length = len(events)
foo = [insert_true([False] * length, i) for i in range(length)]
print(foo)
评论
0赞
beginner_python
3/24/2021
工作了一个魅力,谢谢!使用了insert_true功能。如果有兴趣,这似乎也有效,回答类似的问题:stackoverflow.com/questions/65374372/......
评论