两数之和函数返回None值:我的Python代码哪里出错了?
两数之和问题代码错误分析
题目要求
给定一个整数数组 nums 和一个整数 target,请你找出数组中两个数,它们的和等于 target,并返回这两个数的下标。
你可以假设每种输入只会对应一个答案,且你不能重复使用同一个元素。
你可以按任意顺序返回答案。示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
你编写的代码
nums = [2, 7, 11, 15] tarjet = 9 def return_index(nums,tarjet): index_positions = [] for i, num in enumerate(nums, tarjet): while i == 0: i += 1 if i == 0: obtain_index = num[i] + num[i] if obtain_index == tarjet: index_positions.append(num[i]) return index_positions else: obtain_index = num[i - 1] + num[i] if obtain_index == tarjet: index_positions.append(num[i - 1] , num[i]) return index_positions first_index_list = return_index(nums, tarjet) print(first_index_list)
代码错误分析
你的代码存在多个关键错误,导致输出None:
enumerate参数错误:enumerate(nums, tarjet)把起始索引设为了9(你的tarjet值),这直接让循环拿到的索引和数组真实索引完全脱节,后续所有索引判断都是错的。正确用法是enumerate(nums)(默认从0开始)。- 元素与索引混淆:循环里的
num是数组的元素值,不是数组本身,你写的num[i]相当于去取整数的第i个元素,完全不符合逻辑。要访问数组元素应该用nums[i]。 while循环逻辑混乱:你的while i == 0在索引起始为9时根本不会执行,就算起始索引是0,进入循环后i变成1,循环也会立即终止,里面的if i == 0判断永远不会成立,完全是无效逻辑。append语法错误:index_positions.append(num[i - 1] , num[i])是语法错误,append只能接受一个参数,想要添加多个元素应该用append([索引1, 索引2]),而且你应该添加的是索引而非元素值。- 无默认返回值:你的函数只有在触发内部
if条件时才会返回结果,一旦逻辑走不到该分支,函数会默认返回None,这就是你看到输出为None的直接原因。
修正后的代码示例
解法1:暴力枚举(直观易懂)
nums = [2, 7, 11, 15] target = 9 def two_sum(nums, target): n = len(nums) # 遍历每个元素,和后续元素逐一配对 for i in range(n): for j in range(i + 1, n): if nums[i] + nums[j] == target: return [i, j] result = two_sum(nums, target) print(result) # 输出 [0,1]
解法2:哈希表(时间复杂度O(n),更高效)
nums = [2, 7, 11, 15] target = 9 def two_sum(nums, target): num_map = {} for index, num in enumerate(nums): # 计算当前元素需要的补数 complement = target - num # 如果补数已经在哈希表里,直接返回对应的索引和当前索引 if complement in num_map: return [num_map[complement], index] # 否则把当前元素和索引存入哈希表 num_map[num] = index result = two_sum(nums, target) print(result) # 输出 [0,1]
内容的提问来源于stack exchange,提问作者Joaquín Ruiz
相关产品推荐
相关产品推荐

