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

Python循环查找和为10的数对时报Too many values unpack错误

错误原因分析

触发Too many values unpack (expected 2)报错的直接原因:

  • 你写的for i,j in range (len(listOfIntegers)),(len(listOfIntegers))语法逻辑错误。for循环会逐个迭代in关键字后的可迭代对象,此处in后是包含两个元素的元组:第一个元素是长度为6的range对象,第二个是整数6。第一次迭代时程序尝试把包含6个值的range对象拆分为i、j两个变量,自然触发值过多无法解包的报错。
  • 你想要实现的双循环遍历数对逻辑,需要写两层嵌套for循环,或者通过双重range生成对应可迭代对象再做解包操作。

除上述报错外,原有代码还存在多个逻辑问题:

  • 没有在函数内声明全局变量noOfpairs,直接修改会触发未定义变量报错
  • j+1的索引写法会导致数组越界,当j取到列表最后一个下标时,j+1超出列表长度范围
  • 循环内加了break,只会找到第一个符合条件的数对就停止运行,无法遍历所有组合
  • 函数没有设置return值,最后调用print(findPair())会额外输出None
  • 数对会重复统计(比如(8,2)和(2,8)会被判定为两个不同数对,不需要重复统计的话要控制内层循环的起始下标)
修正后可运行代码
listOfIntegers = [8, 7, 2, 5, 3, 1]
target = 10

def findPair(listOfIntegers, target):
    noOfpairs = 0
    # 外层循环遍历第一个数的下标
    for i in range(len(listOfIntegers)):
        # 内层循环从i+1开始,避免重复统计同一数对
        for j in range(i+1, len(listOfIntegers)):
            if listOfIntegers[i] + listOfIntegers[j] == target:
                print(f"{listOfIntegers[i]} 和 {listOfIntegers[j]} 是符合条件的数对")
                noOfpairs += 1
    print(f"符合条件的数对总数:{noOfpairs}")
    return noOfpairs

findPair(listOfIntegers, target)
运行结果
8 和 2 是符合条件的数对
7 和 3 是符合条件的数对
符合条件的数对总数:2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:54:03