2024-03-28 09:04:28 发布
网友
我正在阅读下面的python代码片段,有一些东西我不明白。root是一个自定义类,它表示一个树节点。有人能解释为什么root的赋值命令是这样工作的吗?你知道吗
while (p.val - root.val) * (q.val - root.val) > 0: root = [root.left, root.right][p.val > root.val]
[root.left, root.right]是2个值的list。你知道吗
[root.left, root.right]
list
p.val > root.val是用作索引的布尔值:值可以是0或1。你知道吗
p.val > root.val
所以这是一种避免(显式)测试值的方法,只需根据0或1索引结果(但测试仍然存在)
0
1
虽然这似乎是一个好主意,但Python中这种构造的效率是值得怀疑的:它动态构建一个列表,然后通过索引访问它(使用边界检查),更不用说它必须同时计算root.left和root.right,不管结果如何(没有短路)。你知道吗
root.left
root.right
我想你最好用以下三元表达式:
root = root.right if p.val > root.val else root.left
它是显式的、短路的,并且不创建/访问临时列表。你知道吗
[root.left, root.right]
是2个值的list
。你知道吗p.val > root.val
是用作索引的布尔值:值可以是0或1。你知道吗所以这是一种避免(显式)测试值的方法,只需根据
0
或1
索引结果(但测试仍然存在)虽然这似乎是一个好主意,但Python中这种构造的效率是值得怀疑的:它动态构建一个列表,然后通过索引访问它(使用边界检查),更不用说它必须同时计算
root.left
和root.right
,不管结果如何(没有短路)。你知道吗我想你最好用以下三元表达式:
它是显式的、短路的,并且不创建/访问临时列表。你知道吗
相关问题 更多 >
编程相关推荐