短装配
工匠台上又出现了一种很熟悉的小流程:先准备一个空列表,再遍历原材料,然后把每个整理好的结果一条条 append 进去。这当然没有错,但当动作非常单纯时,Hoppy 发现这条装配线其实还能再收紧一点。
这就是列表推导式第一次出场的地方。它不是什么新魔法体系,只是把你已经会的“遍历并转换”写得更短、更紧凑。今天我们只处理最简单的情况:一边遍历,一边做一个轻量转换。
把熟悉的装配动作写成更短的一行
如果你已经知道怎么写 for 循环和 append,那你其实已经理解了这节课的大部分内容。列表推导式不是在教你一套新动作,而是在说:当这段工作很规则、很单一时,可以把“结果长什么样”和“要遍历谁”放进同一个方括号里。
raw_labels = [" silver fern", "ember ribbon ", " amber bead "]
polished_labels = [raw_label.strip().title() for raw_label in raw_labels]
print("Polished labels:", polished_labels)
这里的意思并没有变。它仍然是在遍历 raw_labels,只是每次拿到一个 raw_label 时,马上把清理后的结果放进新列表里。重点是:今天只适合这种很简单的转换,不要急着把更多花样塞进去。
它只是更短,不是更炫
这节课最重要的感觉是“装配台更短了”,不是“代码突然更神秘了”。如果你的动作只是把每个原始标签 strip() 一下、再 title() 一下,那么列表推导式就很顺手。可一旦步骤变多、判断变多,普通循环仍然完全合理。
不再先写空的 polished_labels,也不再用准备好的 for 循环逐个 append。直接把结果写成一个列表推导式。
结果部分继续使用 raw_label.strip().title()。今天不是换题,只是把同一个清理动作换成更紧凑的写法。
跑起来后,你会看到和原来一样的整理结果。这个 checkpoint 的重点不是省掉所有循环,而是知道:当工作只是“遍历并转换”时,列表推导式可以是一个更短的装配台。
如果你发现自己想在里面塞很多步骤、很多条件,或者读起来已经开始费劲,那就先回到普通 for 循环。列表推导式适合的是清楚、轻量、可一眼看懂的小装配动作。
参考答案点击展开点击收起
raw_labels = [" moss lantern ", " silver fern", "amber bead "]
polished_labels = [raw_label.strip().title() for raw_label in raw_labels]
print("Polished labels:", polished_labels)高级技巧想更进一步?点击展开点击收起
这一课故意不讲嵌套推导式,也不讲 set 或 dict 的推导式。现在先把一个最小、最安全的版本练熟:把熟悉的遍历和转换压缩成一条清爽的装配线。
下一步我们才会在这个基础上加一点点筛选,但前提仍然是不牺牲可读性。先把“更短,但还是看得懂”这个感觉稳住。