【发布时间】:2020-09-20 03:07:17
【问题描述】:
我希望此语句返回 False。显然列表中有很多 0,但它返回 True。
zeros = [[0] * 8] * 8
print(0 not in zeros)
# True
有人可以解释这种行为吗? 另外,我可以使用其他表达式来计算结果为 False 吗?
【问题讨论】:
我希望此语句返回 False。显然列表中有很多 0,但它返回 True。
zeros = [[0] * 8] * 8
print(0 not in zeros)
# True
有人可以解释这种行为吗? 另外,我可以使用其他表达式来计算结果为 False 吗?
【问题讨论】:
看zeros:
>>> zeros
[[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]]
zeros 的所有元素都是[0, 0, 0, 0, 0, 0, 0, 0]。他们都不是0。
如果您只是想要一个评估为False 的语句,当然有:
>>> print(False)
False
但是如果您想专门测试0s 的任何元素中是否没有任何zeross,您可以这样做:
>>> print(not any(0 in z for z in zeros))
False
【讨论】:
in 运算符只查看zeros 的元素,这些元素是[0] 而不是0。因此它返回false。您可以将其转换为 numpy.array,并根据需要为其定义 in 运算符。
from numpy import array
zeros = array([[0] * 8] * 8)
print(0 not in zeros)
# False
请注意,如果数组是浮点类型,则需要测试0.0。
【讨论】:
zeros = array([[0] * 8] * 8) ...我假设你的实际应用程序是另一个二维数组。