条件、循环与推导式
学习目标
- 使用
if、for、while表达程序流程。 - 掌握
break、continue、else和模式匹配的边界。 - 用列表、字典、集合推导式写出清晰的数据转换。
核心知识点
条件语句根据真值选择分支,循环消费可迭代对象。for 不依赖下标,通常比 while 更安全;推导式是带过滤条件的数据构造语法,不应隐藏复杂副作用。
常用用法
if / elif / else
python
score = 86
if score >= 90:
level = "A"
elif score >= 60:
level = "B"
else:
level = "C"
print(level)
# 输出:B分支条件按顺序判断,首个为真的分支执行后即结束。
真值判断
python
values = [[], [1], "", "ok", 0, 1, None]
truthy = [value for value in values if value]
print(truthy)
# 输出:[[1], 'ok', 1]空容器、空字符串、0 和 None 通常为假;需要区分“空”和“缺失”时不要只写 if value。
for 与 range
python
total = 0
for number in range(1, 5):
total += number
print(total)
# 输出:10range 是惰性可迭代对象,区间右端不包含;复杂遍历优先直接遍历元素。
enumerate()
python
names = ["Ada", "Lin"]
indexed = [f"{index}:{name}" for index, name in enumerate(names, start=1)]
print(indexed)
# 输出:['1:Ada', '2:Lin']需要序号时用 enumerate,不要维护容易错位的手工计数器。
zip()
python
names = ["Ada", "Lin"]
scores = [98, 91]
paired = list(zip(names, scores))
print(paired)
# 输出:[('Ada', 98), ('Lin', 91)]zip 默认按较短序列结束;需要检查长度时可使用 strict=True(Python 3.10+)。
while 与 break
python
number = 1
seen = []
while number <= 5:
if number == 4:
break
seen.append(number)
number += 1
print(seen)
# 输出:[1, 2, 3]while 必须确保循环状态最终变化,否则会无限循环。
continue
python
values = [1, 2, 3, 4]
odds = []
for value in values:
if value % 2 == 0:
continue
odds.append(value)
print(odds)
# 输出:[1, 3]continue 跳过本次循环剩余代码,复杂嵌套时可改写成过滤表达式。
列表推导式
python
squares = [number * number for number in range(5) if number % 2 == 0]
print(squares)
# 输出:[0, 4, 16]推导式适合“一进一出”的转换;多重嵌套或副作用应写普通循环。
不常用但需要知道
循环 else
python
target = 7
for value in [1, 3, 5]:
if value == target:
print("找到")
# 输出:找到
break
else:
print("未找到")
# 输出:未找到循环 else 在循环自然结束、没有执行 break 时运行,适合表达“搜索失败”。
match / case
python
# 代码片段:Python 3.10+;完整文件请使用 Python 3.11+
command = "start"
match command:
case "start":
result = "启动"
case "stop":
result = "停止"
case _:
result = "未知"
print(result)
# 输出:启动结构化模式匹配适合多个固定形状分支;简单真假判断仍用 if。
集合与字典推导式
python
unique = {number % 3 for number in range(6)}
mapping = {number: number * number for number in range(3)}
print(sorted(unique), mapping)
# 输出:[0, 1, 2] {0: 0, 1: 1, 2: 4}推导式中的键重复时,字典保留最后一次值。
易混点
range(stop)不包含stop。zip返回迭代器,消费一次后不能再次从头遍历。break只退出最近一层循环,continue只跳过本次。and/or是短路求值且返回操作数;条件表达式才是a if c else b。- 推导式变量在 Python 3 中有自己的作用域,不会泄漏到外层。
课后小问
如何在列表中同时拿到下标和元素? 答案:使用
enumerate(items, start=...)。 解析:它直接产生(index, value)对,避免range(len(items))的下标访问。for ... else中的else什么时候执行? 答案:循环自然结束且没有遇到break时执行。 解析:else不是“最后一次循环”的意思,而是搜索未提前终止的分支。
本节小结
直接遍历、enumerate、zip 和短小推导式覆盖绝大多数流程代码;while 用于条件未知的循环,match 用于结构化分支。
快速回顾
- 分支:
if / elif / else - 遍历:
for、range、enumerate、zip - 控制:
break、continue - 转换:列表/集合/字典推导式
- 搜索语义:循环
else
阿源的知识库