微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何以 X 数量的“真”值为条件获取 n 长度的布尔数组

如何解决如何以 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?