Python赋值命令gramm

2024-03-28 09:04:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在阅读下面的python代码片段,有一些东西我不明白。root是一个自定义类,它表示一个树节点。有人能解释为什么root的赋值命令是这样工作的吗?你知道吗

   while (p.val - root.val) * (q.val - root.val) > 0:
        root = [root.left, root.right][p.val > root.val]

Tags: 代码命令right节点valrootleft赋值
1条回答
网友
1楼 · 发布于 2024-03-28 09:04:28

[root.left, root.right]是2个值的list。你知道吗

p.val > root.val是用作索引的布尔值:值可以是0或1。你知道吗

所以这是一种避免(显式)测试值的方法,只需根据01索引结果(但测试仍然存在)

虽然这似乎是一个好主意,但Python中这种构造的效率是值得怀疑的:它动态构建一个列表,然后通过索引访问它(使用边界检查),更不用说它必须同时计算root.leftroot.right,不管结果如何(没有短路)。你知道吗

我想你最好用以下三元表达式:

root =  root.right if p.val > root.val else root.left

它是显式的、短路的,并且不创建/访问临时列表。你知道吗

相关问题 更多 >