Python:3D列表操作中,创建临时列表还是多次索引访问更优?
3D列表元素与子列表最大值比较的最优实现
第二种方式远优于第一种,你的担心完全搞反了,具体原因如下:
内存层面:
templst = lst[i][j]不会占用额外内存。Python中列表赋值是引用传递,templst只是指向原lst[i][j]子列表的内存地址,没有复制任何元素,内存开销可以忽略不计。性能层面:第一种方式里,每次执行
max(lst[i][j])都会完整遍历一遍子列表计算最大值。如果你的k循环要遍历子列表的所有元素,相当于重复计算了N次最大值(N是子列表的长度);而第二种方式只需要计算一次最大值,后续判断直接复用这个结果,性能提升非常显著,尤其是子列表较长时。
更高效的优化方案
其实还能进一步优化——把最大值的计算移到最内层k循环的外面,彻底避免重复计算:
for i in range(len(lst)): for j in range(len(lst[i])): sub_list = lst[i][j] sub_max = max(sub_list) # 仅计算一次该子列表的最大值 for k in range(len(sub_list)): if sub_list[k] == sub_max: # 执行你的业务逻辑 pass
内容的提问来源于stack exchange,提问作者capyman1701
相关产品推荐
相关产品推荐

