这是一个非常琐碎的问题,我无法找到答案。
这就是问题所在。我有以下数组:
vals = [-5, 2]
我想检查 val[0]
或 val[1]
是否大于 0。如果其中一个为真,那么我应该输出 True。
我的直接想法是使用; (vals[1] or vals[0]) > 0)
但我发现 (5 | -2) > 0
是 False 其中 (5或 -2) > 0
为真
任何澄清将不胜感激。
最佳答案
or
和|
有什么区别?
or
是逻辑或,|
是按位或逻辑或。
逻辑或
The logical or in python returns the first value that is true.
例子:
>>> None or False or 5
5
>>> -5 or 2
-5
按位或逻辑包含或
按位或逻辑包含或由python中的|
运算符表示并创建number where all bits are set that are set in at least one of the given numbers .
例子:
- 2 是二进制
0010
- 4 是二进制
0100
两者之间的逻辑或导致 0110
为 6。
>>> 2 | 4
6
如何存储负数通常是特定于实现的。然而,在大多数系统上,通过创建 two's complement 来存储负数。通过反转每个位并加1来计算正数。
该数字按位或两个任何其他数字仍会导致负数:
>>> -5 | 2
-5
两者都不能解决您的问题
使用时
(vals[1] or vals[0]) > 0
似乎有效,当您翻转值时它会失败:
>>> vals = [2, -5]
>>> (vals[1] or vals[0]) > 0
False
你应该分别检查这两个值
>>> vals = [-5, 2]
>>> vals[0] > 0 or vals[1] > 0
True
对于较大的输入,这可能不方便。您应该使用 any使用生成器表达式:
>>> any(x > 0 for x in vals)
True
关于python - 不明白为什么 (5 | -2) > 0 是 False 其中 (5 or -2) > 0 是 True,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55224650/