如何解决如何以 X 数量的“真”值为条件获取 n 长度的布尔数组
我有以下具有二元结果(即 1 或 0)的事件列表:
events=['A','B','C']
outcomes=[True,False]
在每种情况下,这些结果中只有一个可以为 True。有没有办法得到一个数组,如:
array=([True,False,False],[False,True,True])
我知道我可以使用带有重复的 itertools 产品,但这会在数组中产生不需要的场景,例如 [True,True] 等。理想情况下,我不必过滤它,因为我希望我的“事件”列表比上面的要长得多。
有人有什么想法吗?我可以在数组中包含 1 或 0 个值,我不会大惊小怪。
解决方法
你可以创建一个生成器来自己做。
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','C']
length = len(events)
foo = [insert_true([False] * length,i) for i in range(length)]
print(foo)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。