Python中map对象二次遍历失效导致次高分计算错误求助
问题原因
- Python 3 中
map()函数返回的是迭代器对象,迭代器仅支持单次遍历:第一次在find_max_score函数中遍历arr计算最高分后,迭代器指针已经移动到末尾,第二次传入find_runner_up_score函数时再次遍历不会返回任何元素,因此for循环完全不执行,次高分始终为初始值0。
解决方法
将map()返回的迭代器转换为支持多次遍历的列表即可,修改主程序中的arr赋值代码:
if __name__ == '__main__': n = int(input()) # 把map迭代器转成列表,支持多次遍历 arr = list(map(int, input().split())) max_score=find_max_score(arr) runner_up_score=find_runner_up_score(max_score,arr)
可选优化点
- 可以调整逻辑通过单次遍历同时计算最高分和次高分,降低遍历次数提升性能
- 不要将最高分、次高分的初始值默认设为0,避免输入序列全为负数时计算结果错误,可改为初始值为
float('-inf')
内容的提问来源于stack exchange,提问作者Siddharth Manthan
相关产品推荐
相关产品推荐

