应优先使用内置函数和标准库替代手写逻辑,因其用c实现、效率更高;避免循环内重复计算;善用生成器降低内存开销;根据操作特征选择合适数据结构。

用内置函数和标准库替代手写逻辑
Python的内置函数(如 sum()、max()、any()、all())和标准库模块(如 collections.Counter、itertools、operator)都是用C实现的,执行效率远高于等效的Python循环。例如统计列表中元素频次,用 Counter(lst) 比用字典加循环快2–5倍;判断是否存在满足条件的元素,用 any(x > 10 for x in data) 比手动写for+break更简洁且更快。
避免在循环内做重复计算或对象创建
把不变的表达式移出循环体,尤其是函数调用、属性访问、正则编译、大对象初始化等。比如:
- 错误写法:for item in data: result.append(re.match(pattern, item))(每次循环都重新编译正则)
- 正确写法:compiled = re.compile(pattern); for item in data: result.append(compiled.match(item))
同理,len(my_list) 不要在while循环条件中反复调用,提前赋值;字符串拼接不用 += 在大循环中累积,改用列表收集后 ''.join()。
善用生成器和迭代器减少内存开销
处理大数据集时,优先使用生成器表达式((x*2 for x in range(10**6)))而非列表推导式([x*2 for x in range(10**6)]),可将内存占用从几百MB降至几KB。文件逐行读取、数据库游标遍历、自定义迭代逻辑等场景,都应返回 yield 而非构建完整列表。配合 itertools.islice、itertools.chain 等工具,还能避免不必要的中间容器。
选择合适的数据结构提升查找与插入效率
根据操作特征选结构:
- 频繁成员检测(in)?用 set 或 frozenset(O(1)),别用 list(O(n))
- 需要保持插入顺序且去重?用 dict.fromkeys(items)(Python 3.7+ 保持顺序)或 collections.OrderedDict
- 高频计数?collections.Counter 比手动字典累加更安全高效
- 多线程环境需共享状态?考虑 queue.Queue 而非普通列表 + lock 手动同步










