标题几乎说明了一切。如果我问Python什么是all(test = [[False, True],[False, False]]),它输出True:
all(test = [[False, True],[False, False]])
all(test) Out[279]: True
我在玩Python的布尔值,发现这个很难理解。如果我把它变成一个Numpy数组test = np.array([[False, True],[False, False]]),它会输出False:
test = np.array([[False, True],[False, False]])
test.all() Out[283]: False
cgh8pdjw1#
Numpy以一种更注重数学的方式来实现,它实际上会查看所有列表中的所有值。另一方面,Python解释器从编程的Angular 来看待它。all([[False, True],[False, False]])计算为True的原因是Python的两个怪癖。
all([[False, True],[False, False]])
True
all(iterable)
。
函数检查超级列表中的每个元素,并查看其结构为
。但是,
并没有进入每个子列表,而是简单地评估每个子列表是否为“truthy”。由于子列表中都有值,因此它们都是truthy,因此评估为
。最后,
只看到超级列表由两个truthy元素组成,因此它返回
14ifxucb2#
很酷的问题。解决这个问题的最好方法是在Python REPL中自己尝试一下:
$ python [Clang 14.0.0 (clang-1400.0.29.202)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> bool([False]) True >>> bool(False) False >>> all([[]]) False >>> all([[False]]) True
但是,嘿,我是谁,但一个卑微的乌鸦,站在巨人的肩膀上在这里。查看this answer这里了解更多的细节和澄清。
w8rqjzmb3#
在Python中,非空列表是“真”的
>>> bool([False, True]) True
all不会比这更深入地研究对象。你给它两个非空列表,你得到了True作为回报。ndarray.all做同样的事情,除了它更深入地查看数组。这就是numpy的重点-它将操作广播到它的元素。您可以调整它的参数,例如axis,它将考虑数组的子集。你可以用vanilla python做类似的事情,通过迭代内部列表:
all
ndarray.all
axis
>>> test = [[False, True],[False, False]] >>> all(val for inner in t2 for val in inner) False
3条答案
按热度按时间cgh8pdjw1#
Numpy以一种更注重数学的方式来实现,它实际上会查看所有列表中的所有值。另一方面,Python解释器从编程的Angular 来看待它。
all([[False, True],[False, False]])
计算为True
的原因是Python的两个怪癖。all(iterable)
函数查看可迭代对象中的每个元素,并检查它们是否都是真的。1.不为空的列表是truthy
。
all()函数检查超级列表中的每个元素,并查看其结构为
[list, list]。但是,
all()并没有进入每个子列表,而是简单地评估每个子列表是否为“truthy”。由于子列表中都有值,因此它们都是truthy,因此评估为
True。最后,
all()只看到超级列表由两个truthy元素组成,因此它返回
True`。14ifxucb2#
很酷的问题。解决这个问题的最好方法是在Python REPL中自己尝试一下:
但是,嘿,我是谁,但一个卑微的乌鸦,站在巨人的肩膀上在这里。查看this answer这里了解更多的细节和澄清。
w8rqjzmb3#
在Python中,非空列表是“真”的
all
不会比这更深入地研究对象。你给它两个非空列表,你得到了True
作为回报。ndarray.all
做同样的事情,除了它更深入地查看数组。这就是numpy的重点-它将操作广播到它的元素。您可以调整它的参数,例如axis
,它将考虑数组的子集。你可以用vanilla python做类似的事情,通过迭代内部列表: