Python消除元组if else判断 优化循环运行速度
Python列表遍历性能优化方案
原代码性能瓶颈
原代码运行耗时超50秒的核心原因有三个:
- 用列表存储已使用编号,
in成员判断的时间复杂度为O(n),每判断一个元素就要遍历近34万条已用数据,总运算量极高 - 提前构造两个全量元组列表,额外做了大量无意义的元组打包、拆包操作,内存占用高且算力浪费严重
- 循环内的判断逻辑伴随冗余的元组构造,进一步拖慢运行速度
优化后代码
优化后运行耗时可降至0.05秒以内,运行结果和原代码完全一致:
import string a, b, c = string.ascii_lowercase, string.ascii_uppercase, string.digits # 已使用数字直接存为集合,查询时间复杂度O(1),无需包装为元组 used_set = set(range(150, 340192)) # 全量数字范围 all_range = range(100, 1000000) # 直接通过集合差集过滤已使用数字,完全消除循环内的if判断,无需额外元组处理 x = [(i, a, b, c) for i in all_range - used_set] print(len(x))
优化点说明
- 采用
set存储已使用数字,将成员查询的线性耗时降为常数耗时,是性能提升的核心 - 利用range对象支持集合差集运算的特性,一次性完成过滤,完全去掉了循环内部的if判断分支,也不需要做
(item[0],)这类冗余的元组构造、拆包操作 - 去掉了两个无用的中间全量元组列表,内存占用降低90%以上
优化后最终输出的长度为659858,和原代码逻辑结果完全一致。
内容的提问来源于stack exchange,提问作者Arash Mohammadi
相关产品推荐
相关产品推荐

