python - 不明白为什么 (5 | -2) > 0 是 False 其中 (5 or -2) > 0 是 True

标签 python conditional

这是一个非常琐碎的问题,我无法找到答案。

这就是问题所在。我有以下数组:

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/

相关文章:

python - Tornado 在一个请求期间存储上下文,或获取当前请求处理程序?

python - np.savetxt 输出 float 据需要哪个参数?

python - 无法使用 Selenium 打开 Firefox 浏览器

ruby - 从条件语句构建散列

excel - 表中比较条件

python - 条件格式 xlwt

python - 计算每组每 n 天的斜率

python - 如何从python中的字符串获取索引位置而不产生重复结果

r - 操作 R 中字符列表的列表

c++ - std::conditional 编译时分支评估