yuh*_*ngd 1 python grammar variable-assignment
我正在阅读以下python代码片段,有一些我不明白的东西.root是一个自定义的类,表示一个树节点.任何人都可以解释为什么root的赋值命令以这种方式工作?
while (p.val - root.val) * (q.val - root.val) > 0:
root = [root.left, root.right][p.val > root.val]
Run Code Online (Sandbox Code Playgroud)
[root.left, root.right]是list2个值.
p.val > root.val 是一个用作索引的布尔值:value可以是0或1.
因此,它是一种避免(显式)测试值的方法,只需根据0或1(但测试仍在那里)对结果进行索引
虽然它可能看起来是一个好主意,但Python中构造的效率是可疑的:它动态地构建一个列表然后通过索引访问它(带边界检查),更不用说它必须评估两者root.left和root.right任何结果可能是(没有短路).
我认为使用以下三元表达式会更好:
root = root.right if p.val > root.val else root.left
Run Code Online (Sandbox Code Playgroud)
它是显式的,短路的,并且不会创建/访问临时列表.
| 归档时间: |
|
| 查看次数: |
50 次 |
| 最近记录: |