WMX · 随记
·Python· 3 分钟阅读

列表推导式:筛选与转换的执行顺序

读取文本数字时,如果先转换再筛选,空字符串会在过滤之前触发异常。推导式简洁,但仍有明确的执行次序。

▶ 本文含视频讲解
▶ 教学视频手动播放 · 英语讲解

Python Tutorial for Beginners

Python 入门课程作为语法与编程背景复习;本文使用的较新标准库特性不保证在该课程中逐项覆盖。此为外部原版课程,多篇笔记可能共用;未剪辑为本文专属视频。

播放器需要能访问 YouTube 的网络;若这里无法加载,可打开原视频。本文与本地图解仍可独立阅读。

Python 系列概览:输入校验、数据处理与行为验证
Python 系列概览:输入校验、数据处理与行为验证 点击图片查看大图 ↗

问题从哪里出现

读取文本数字时,如果先转换再筛选,空字符串会在过滤之前触发异常。推导式简洁,但仍有明确的执行次序。

理解核心机制

在 [transform(x) for x in values if condition(x)] 中,条件通过后才执行转换。Python 3 的普通推导式迭代变量有独立作用域;较复杂的异常处理则适合展开成循环。

动手做一个小实验

Python 3.11 或更新版本,仅使用标准库;将示例保存为 demo.py 后执行 python3 demo.py。

Python5 行 · 可横向滚动
raw = [" 12 ", "", "7", "  "]
cleaned = [text.strip() for text in raw]
numbers = [int(text) for text in cleaned if text]
assert numbers == [12, 7]
print(numbers)

适用边界与常见误区

非空不代表可以转换为整数,例如 abc 仍会失败。不要把多个嵌套循环和副作用塞进一行,短代码不一定更容易审查。

继续练习

加入负数、空白和非法字符,改成分别收集成功值与错误行号的普通循环,说明为何这里不再适合一行推导式。

参考资料

阅读相关官方文档或原始资料 ↗

← 返回文章归档