在python中使用And /或over树对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在python中使用And /或over树对象相关的知识,希望对你有一定的参考价值。

我正在阅读一些Python笔记,我看到了这个例子和它的工作发现,但我试图了解发生了什么。

 class TreeNode(object):
 def __init__(self, x):
     self.val = x
     self.left = None
      self.right = None



 T= TreeNode(5)
 T.left = TreeNode(2)
 T.right = TreeNode(7)

 ans = T and T.left   #===> This returns T.left, <--------- how?
 ans2 = T or T.left   #===> This returns T .  <-------------?

 ans3 = T.left and T.right #====> T.right <----- mind blows away :(, how , how ??

如何和/或运营商在这里工作?我试着查看谷歌,但它只是向我展示了基本和/或东西:(。

答案

andor运营商处理他们的操作数的truthiness。所以

X and Y and Z and ...

返回第一个falsey操作数,或者如果它们都是真的,则返回最后一个操作数

X or Y or Z or ...

返回第一个truthy操作数,或者如果它们都是假的,则返回最后一个操作数。

上面的链接解释了什么被认为是真实和虚假。物体总是真实的,所以

T and T.left

将永远返回T.left,因为T永远不会是第一个虚假的操作数。反过来

T or T.left

将永远返回T,因为它是第一个真正的操作数。

T.left and T.right

返回T.right,因为T.left不是假的。

另一答案

你必须从根本上理解真值测试和布尔运算符。

https://docs.python.org/3.6/library/stdtypes.html

注意,or运算符返回其中一个参数:

x or y如果x为假,则为y,否则为x

这是一种常用于检查某些东西是否有问题的习惯用法,通常是None或空容器。

例如使用x如果x不是None否则使用别的东西...所以快捷方式:

if not T:
    ans = T.left
else:
    ans = T

我更喜欢完整的if-else,或者如果你想要一些可以放在一条线上,可以使用conditional expression

ans = T.left if not T else T

要么

ans = T if T else T.left

和运算符也返回其中一个参数:

x and y如果x为假,则为x,否则为y

if not T:
    ans = T
else:
    ans = T.left

以上是关于在python中使用And /或over树对象的主要内容,如果未能解决你的问题,请参考以下文章

Python 2.7 中 AND-OR-tree 的存储格式

python3 中 and 和 or 运算规律

使用 SQL“sum”和“over”语法的 Totals 和 Runningtotals

二叉搜索树与双向链表(Python and C++版本)

Python 中的逻辑值

如何在 pyspark 中可视化决策树模型/对象?