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

Python3中for循环与max()函数的运行速度差异疑问

LeetCode 718题:Python两种取二维数组最大值方式的性能差异解析

在解决LeetCode第718题时,发现Python3中用嵌套for循环和内置max()函数获取二维数组最大值的运行速度差异明显:

  • 嵌套for循环遍历dp数组取最大值时,运行时间超过9500-10000ms,触发超时(TLE);
  • 使用max(max(each) for each in dp)获取最大值时,运行时间为8000-9000ms,可通过测试。

以下是对应的代码:

class Solution:
    def findLength(self, nums1: List[int], nums2: List[int]) -> int:
        n = len(nums1)
        m = len(nums2)
        res = 0
        dp = [[0]*(m+1) for i in range(n+1)]
        # dp[i][j] means the max length of both subarray ends at nums1[i] and nums2[j]
        for i in range(1,n+1):
            for j in range(1, m+1):
                if(nums1[i-1] == nums2[j-1]):
                    dp[i][j] = dp[i-1][j-1] + 1
        
        # using max, pass
        return max(max(each) for each in dp)
        
        # using for loops, TLE
        # for i in range(1, n+1):
        #     for j in range(1, m+1):
        #         res = max(dp[i][j], res)
        # return res

两者速度差异的核心原因如下:

  • 底层实现的效率差:Python内置的max()函数是用C语言实现的,执行时直接调用底层原生代码,跳过了Python解释器对字节码的处理开销。而纯Python写的嵌套for循环,每一次迭代、每一次max调用都要经过Python解释器的层层处理,累积下来耗时显著增加。
  • 循环与操作的复杂度:嵌套for循环中,每次都要在Python层面执行res = max(dp[i][j], res),两层循环的迭代逻辑也都是Python级别的;而max(max(each) for each in dp)的核心计算都由内置max完成,Python只负责迭代子列表,大部分计算逻辑在更高效的C层面执行。
  • 生成器的迭代优化:max(each) for each in dp是生成器表达式,生成器在迭代时的开销比显式的for循环更小,且内置max处理生成器时的效率也优于手动维护变量的循环逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:25:23