循环迭代次数超出预期,三元组比较Python代码问题求助
向量比较计分问题修复
输入示例
5 6 7 3 6 10
问题现象
尝试比较两个向量对应元素,统计得分更高的一方次数,但循环迭代次数远超预期(是应有次数的三倍),怀疑问题出在全局函数的返回值上(已知返回结果为元组,无此问题)。
原代码
比较函数部分
Alice_wins=0 Bob_wins=0 def compareTriplets(a, b): global Alice_wins global Bob_wins # Write your code here for ele in a: for i in b: if ele>i: Alice_wins+=1 elif ele<i: Bob_wins+=1 else: pass return Alice_wins, Bob_wins
主程序部分
if __name__ == '__main__': fptr = open(os.environ['OUTPUT_PATH'], 'w') a = list(map(int, input().rstrip().split())) b = list(map(int, input().rstrip().split())) result = compareTriplets(a, b) fptr.write(' '.join(map(str, result))) fptr.write('\n') fptr.close()
问题根源
- 嵌套循环错误:外层遍历
a的每个元素,内层遍历b的每个元素,导致a中每个元素都和b所有元素比较,总迭代次数为len(a)*len(b)。而题目要求的是对应位置元素逐一比较,只需要len(a)次迭代。 - 全局变量冗余:使用全局变量存储得分完全没必要,还会导致重复调用函数时的状态污染。
修复后的代码
def compareTriplets(a, b): alice_score = 0 bob_score = 0 # 配对两个向量的对应元素,逐一比较 for a_val, b_val in zip(a, b): if a_val > b_val: alice_score += 1 elif a_val < b_val: bob_score += 1 return alice_score, bob_score if __name__ == '__main__': import os fptr = open(os.environ['OUTPUT_PATH'], 'w') a = list(map(int, input().rstrip().split())) b = list(map(int, input().rstrip().split())) result = compareTriplets(a, b) fptr.write(' '.join(map(str, result))) fptr.write('\n') fptr.close()
修复说明
- 用
zip(a, b)将两个向量的对应元素配对,一次循环完成所有符合要求的比较,迭代次数与向量长度一致。 - 把计分变量放在函数内部,每次调用函数都是独立计算,避免全局变量带来的副作用。
- 针对输入示例,对应位置比较后会得到Alice得1分、Bob得1分的结果,符合预期。
内容的提问来源于stack exchange,提问作者Jon370
相关产品推荐
相关产品推荐

