You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

海象运算符未正确赋值变量?归并排序代码出现r变量未绑定错误

问题原因分析

核心原因

这个问题是Python逻辑或(or)的短路求值特性导致的:

  • Python中A or B的求值规则为:如果A的布尔值为True,直接返回A的结果,完全不会执行B的代码;只有A为False时才会执行并返回B的结果。

对应你的代码中while的判断逻辑:

while (l := len(left)) or (r := len(right)):
  • l := len(left)是or的左操作数,每次进入循环判断条件时都会优先执行,所以l每次循环都会被赋值,永远不会出现未定义的问题。
  • 只要left数组不为空(也就是len(left) > 0),左操作数的结果就为True,此时右操作数r := len(right)会被直接跳过执行,r变量在本次循环中没有被定义。
  • 当你在后续的if l and r and left[0] < right[0]判断中直接引用r时,就会触发UnboundLocalError。

修复方案

你只需要保证每次循环时l和r都会被赋值即可,比如修改为如下写法:

# 写法1:用加法替代or,保证两个海象运算都会执行
while (l := len(left)) + (r := len(right)) > 0:
    if l and r and left[0] < right[0]:
        output.append(left.pop(0))
    elif r:
        output.append(right.pop(0))
    else:
        output.append(left.pop(0))

或者更易读的常规写法:

# 写法2:提前赋值两个变量,再判断终止条件
while True:
    l = len(left)
    r = len(right)
    if not l and not r:
        break
    # 原有归并逻辑不变
    if l and r and left[0] < right[0]:
        output.append(left.pop(0))
    elif r:
        output.append(right.pop(0))
    else:
        output.append(left.pop(0))

内容的提问来源于stack exchange,提问作者Connor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 04:54:06