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

为什么查找列表最大值索引的Python列表推导式运行速度远慢于普通循环

Python列表最大值索引查找性能差异原因解析

核心性能差距根源

你对第一种实现的时间复杂度预估有误,它并非只遍历两次列表,而是达到了O(n²) 时间复杂度,这是两种方法性能相差上千倍的核心原因:

  • 你将max(nums)直接写在了列表推导式的if判断条件中,Python不会自动对这类表达式做执行时机优化,每遍历一个元素做条件判断时,都会重新执行一次max(nums)全量遍历列表计算最大值。
    以你10000长度的测试用例为例,第一种方法会执行10000次max(nums),每次都要遍历10000个元素,总操作量达到亿级;而第二种方法仅需要遍历1次列表,总操作量只有万级,自然会出现上千倍的性能差距。

第一种写法的优化方案

你只需要把最大值提前计算并缓存成变量,就能把时间复杂度降到O(n),性能和第二种方法处于同一量级,优化后代码如下:

def find_indexes_1_fixed(nums):
    max_val = max(nums)
    return [index for index, number in enumerate(nums) if number == max_val]

优化后的版本仅会遍历两次列表:第一次计算最大值,第二次收集符合要求的索引,既保留了列表推导式的简洁性,也解决了性能问题。

额外注意点

第二种实现存在边界问题:你初始化largest = 0,如果输入列表所有元素都是负数,该方法会返回错误结果,建议把初始值修改为largest = float('-inf')适配全场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:24:04