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

LeetCode两数之和问题:Python海象运算符搭配dict.get()为何失效?

twoSum函数返回None的问题分析与修复

问题场景

给定整数数组nums和整数target,要求返回两个数的下标,使它们的和为target。输入必有唯一解,不可重复使用同一元素,返回顺序不限。但测试用例twoSum([2,7,11,15], 9)返回None,使用Python 3.10版本,海象运算符已支持。

问题根源

问题出在布尔判断的逻辑错误:
当要匹配的第一个元素下标为0时,lookup_table.get(target - num)返回0,而Python中0属于布尔假值,导致if second_index := lookup_table.get(target - num)这个条件不成立,跳过了return分支。以测试用例为例:

  • 第一次循环:num=2,index=0,target - num=7不在lookup_table中,将2:0存入字典
  • 第二次循环:num=7,index=1,target - num=2在字典中,get返回0,但0被if判断为False,所以不执行return,转而将7:1存入字典
  • 后续循环找不到符合条件的补数,函数执行完毕后默认返回None

修复方案

方案1:直接检查补数是否存在于字典中(推荐)

跳过get方法,直接判断补数是否在字典的键中,避免布尔值判断的坑:

def twoSum(nums: list, target: int) -> list:
    lookup_table = {}
    for index, num in enumerate(nums):
        complement = target - num
        if complement in lookup_table:
            return [lookup_table[complement], index]
        lookup_table[num] = index

方案2:修正海象运算符的判断逻辑

如果要保留海象运算符,需要明确判断返回的下标不是None,而不是依赖其布尔值:

def twoSum(nums: list, target: int) -> list:
    lookup_table = {}
    for index, num in enumerate(nums):
        if (second_index := lookup_table.get(target - num)) is not None:
            return [second_index, index]
        lookup_table[num] = index

验证

修复后的代码运行twoSum([2,7,11,15], 9)会正确返回[0, 1],符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:05:36