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

两数之和函数返回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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 14:35:25