我有3个列表:
a = [True, False, True]
b = [False, False, True]
c = [True, True, False]
当我输入
a or b or c
我想找回一个
的列表[True, True, True]
但我回来了
[True, False, True]
为什么有任何想法?我该如何组合这些面具?
答案 0 :(得分:9)
您的or
运算符正在将列表作为整个对象进行比较,而不是它们的元素。由于a
不是空列表,因此它的计算结果为true,并成为or
的结果。 <{1}}和b
甚至没有评估过。
要按位置生成三个列表的逻辑OR,您必须遍历其内容并对每个位置的值进行OR运算。要将一堆可迭代转换为其分组元素的列表,请使用c
。要检查iterable中的任何元素是否为真(其整个内容的OR),请使用zip()
。用列表理解一次完成这两个:
any()
答案 1 :(得分:9)
这个怎么样:
from numpy import asarray as ar
a = [True, False, True]
b = [False, False, True]
c = [True, True, False]
尝试:
>>> ar(a) | ar(b) | ar(c) #note also the use `|` instead of `or`
array([ True, True, True], dtype=bool)
所以不需要zip
等。
答案 2 :(得分:6)
or
返回第一个操作数(如果它的计算结果为true),非空列表的计算结果为true
;因此,如果a or b or c
是非空列表,a
将始终返回[any(t) for t in zip(a, b, c)]
。
可能你想要
and
(如果您使用any
替换all
答案 3 :(得分:2)
a
被视为true,因为它包含值; b
,c
未被评估。
>>> bool([])
False
>>> bool([True])
True
>>> bool([False])
True
>>> [False] or [True]
[False]
表达式
x or y
首先评估x
;如果x
为真,则返回其值;否则,将评估y
并返回结果值。
答案 4 :(得分:1)
试试这个:
a = [True, False, True]
b = [False, False, True]
c = [True, True, False]
res = [a[i] or b[i] or c[i] for i in range(len(a))]
print res
答案 5 :(得分:1)
以下是如何使用numpy快速(大型数组):
import numpy as np
a = [True, False, True,...]
b = [False, False, True,...]
c = [True, True, False,...]
res = (np.column_stack((a,b,c)).any(axis=1)
print res
请注意,a
成为第一列,b
成为第二列,依此类推使用np.column_stack()
。然后在np.any()
上的array
上axis=1
(逻辑OR)进行a
,这将比较b
,c
和ko.observable
的第一个元素, 等等等等;产生一个布尔向量,其长度与您想要比较的向量相同。
答案 6 :(得分:1)
怎么样
result = numpy.logical_or(a, b, c)
print(result)
答案 7 :(得分:0)
这是使用python的asterisk functions(Animal{animalType=Lion, name=Leo, age=5, healthConcerns=Cut on left front paw, feedingSchedule=Twice daily}
Animal{animalType=Tiger, name=Maj, age=15, healthConcerns=None, feedingSchedule=3x daily}
,*args
)之一的好地方,这将允许您传递3或300000个列表。
**kwargs
在这里,您使用 a = [True, False, True]
b = [False, False, True]
c = [True, True, False]
data_lists = [a,b,c]
将该列表扩展为参数,使用*
将数据重新排列为列(作为列表),并使用zip
检查该列中是否有任何单元格为{ {1}}。
any
例如,如果要处理大量列表,则相同,例如
True