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

