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

Python实现sums函数:单循环查找两列表和为target的索引

问题说明

需要实现名为sums的函数,规则如下:

  • 接收3个入参:整数列表nums1、整数列表nums2、整数target
  • 返回值为元组(i,j),其中i是nums1的元素索引,j是nums2的元素索引,满足nums1[i] + nums2[j] = target
  • 没有符合条件的结果时,返回字符串Not found
  • 函数内部仅允许写1个显式循环(for/while均可),禁止嵌套循环

原有代码存在以下问题:

  • 函数内部硬编码了测试用的列表和目标值,会覆盖外部传入的参数
  • 使用了两层嵌套for循环,不符合单循环要求
  • 匹配成功后取的是元素值而非索引,不符合返回要求
  • 只有打印逻辑没有返回值,也未处理无匹配的场景
  • 函数体未正确缩进,不符合Python语法规范
实现思路

利用Python内置方法构建nums2的「元素值-索引」映射字典(该过程不写显式循环,不占用循环配额),仅用1个for循环遍历nums1:

  1. 遍历过程中实时计算当前nums1元素需要匹配的补数(target - 当前元素值)
  2. 判断补数是否存在于nums2的映射字典中,存在则直接返回对应的索引元组
  3. 循环结束仍未找到匹配项,返回Not found
正确代码
def sums(nums1, nums2, target):
    # 用内置方法生成nums2的值到索引的映射,无手动编写的循环结构
    num2_index = dict(zip(nums2, range(len(nums2))))
    # 仅1个显式for循环,遍历nums1
    for i, num1 in enumerate(nums1):
        complement = target - num1
        if complement in num2_index:
            return (i, num2_index[complement])
    # 循环走完未找到匹配项
    return "Not found"

# 测试用例
if __name__ == "__main__":
    nums1 = [11, 2, 15, 7, 8]
    nums2 = [2, 3, 4, 5]
    target = 9
    print(sums(nums1, nums2, target)) # 输出(3, 0),对应nums1[3]=7、nums2[0]=2,和为9
代码说明
  • dict(zip(nums2, range(len(nums2)))):通过内置的zip把nums2的元素和对应索引打包,再转成字典,查找时间复杂度为O(1),整个过程没有手动编写循环结构
  • 仅使用了1个for循环遍历nums1,完全符合题目循环数量要求
  • 找到匹配项直接返回,无多余遍历逻辑
  • 兼容无匹配场景,按要求返回对应结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:48:19