如何将带enumerate的数组处理逻辑简化为单行代码?
代码简化方案
最直接的简化方式是用列表推导式替代手动维护空列表、逐次append的样板代码,原代码无分支判断、提前中断等特殊逻辑,完全适配列表推导式的使用场景:
imgs = [foo(obj, f"img-{i}.png") for i, obj in enumerate(objlist)]
等价性说明
- 该写法和原代码运行逻辑完全一致:迭代顺序、
foo函数的调用时机、传入的对象与文件名参数、最终收集的返回值列表顺序都没有差异,foo内部保存图片的副作用会正常触发。 - 不需要额外导入任何依赖,运行效率和原循环写法基本持平,是Python社区此类遍历收集场景的通用规范写法。
扩展性优化(可选)
如果后续图片命名规则可能调整,可以将文件名生成逻辑单独拆分,避免硬编码散落在推导式中:
def generate_img_name(idx): return f"img-{idx}.png" imgs = [foo(obj, generate_img_name(i)) for i, obj in enumerate(objlist)]
避坑提示:不要为了追求“极简”使用
map+lambda的组合实现同等逻辑,这类写法可读性远低于列表推导式,没有实际收益。
内容的提问来源于stack exchange,提问作者Diego Vallejo
相关产品推荐
相关产品推荐

