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
相关产品推荐
相关产品推荐

