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
相关产品推荐
相关产品推荐

