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

Python循环中:每次取字典列表长度还是用存长度的字典更快?

字典中列表长度的效率对比:直接调用len() vs 预存长度字典

首先得明确一个关键事实:Python里的列表(还有字典、字符串等内置容器)的长度是提前存储在内部结构里的,调用len()函数只是直接读取这个预存值,时间复杂度是O(1)——也就是说,这个操作几乎没有性能开销,和你从另一个字典里读一个值的成本差不多。

接下来对比两种方案的优劣:

  • 方案1:循环内每次调用len(my_dict[key])
    这种写法的性能和预存长度几乎没有差异,而且代码更简洁,不需要额外维护一个存储长度的字典。更重要的是,如果原字典里的列表后续有增删操作(哪怕是在循环里修改),len()能实时拿到最新的长度,不会出现数据不一致的问题。

  • 方案2:预存长度字典(比如len_dict = {k: len(v) for k, v in my_dict.items()})
    这种方式读取长度也是O(1),但需要额外的内存来存储这个长度字典。而且如果原列表发生变化,你必须同步更新len_dict里对应的值,否则会出现长度不匹配的bug——这种维护成本远大于所谓的"性能提升",毕竟len()本身已经足够快了。

举个实际代码的例子:

my_dict = {"nums": [1, 3, 5, 7, 9]}

# 方案1:直接调用len(),简洁可靠
for _ in range(len(my_dict["nums"])):
    # 执行你的逻辑
    pass

# 方案2:预存长度,没必要还容易出问题
len_dict = {k: len(v) for k, v in my_dict.items()}
for _ in range(len_dict["nums"]):
    # 如果这里修改了my_dict["nums"],len_dict里的数值就失效了
    my_dict["nums"].append(11)
    # 后续循环次数就和实际列表长度不匹配

总结

除非你能100%保证列表是完全不可变的,并且正在做极致性能优化(这种场景在日常开发中极少),否则优先选择直接调用len(my_dict[key])——既高效又省心,完全没必要多维护一个长度字典。

内容的提问来源于stack exchange,提问作者Maulish Shhah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:15:41