形状选择
记录室这一章快结束时,Hoppy 站到了一张新的分拣台前。台上没有更难的怪物,只有四张很小的任务卡:一张要记住来访顺序,一张要把位置成对收好,一张只想留下不同印记,还有一张要把重复借阅记成次数。
这节课不是再学一个新容器,而是做一次轻 checkpoint:当面前的数据任务不一样时,你能不能开始感觉到,list、tuple、set、dict 各自更适合站在哪个位置。
四个小站,想要保留的东西并不一样
这一课最重要的,不是背“谁长什么样”,而是问一句更有用的话:这个任务最想保留什么?是顺序?是固定成对?是唯一成员?还是“名字 -> 次数”这种记录关系?
first_visitor = "Nia"
second_visitor = "Sol"
third_visitor = "Tavi"
shelf_zone = "Amber Wing"
shelf_slot = 5
seal_log = ["sun", "fern", "sun", "fern"]
borrow_log = ["Moon Map", "Moon Map", "Bell Log"]
arrival_line = [first_visitor, second_visitor, third_visitor]
locator_card = (shelf_zone, shelf_slot)
unique_seals = set(seal_log)
borrow_counts = {}
for title in borrow_log:
if title not in borrow_counts:
borrow_counts[title] = 0
borrow_counts[title] += 1
print("Arrival line:", arrival_line)
print("Locator card:", locator_card)
print("Unique seals:", unique_seals)
print("Borrow counts:", borrow_counts)
这里其实是在做四次很轻的判断:来访者排队时,顺序要留下来,所以用 list;位置卡只有区域和格号这对固定信息,所以用 tuple;印记日志里重复很多,但我们只关心不同印记,所以用 set;借阅标题会一再出现,而我们想记住每个标题的次数,所以用 dict。
先看任务职责,再选结构
你现在不用把四种结构重新各讲一遍,也不用做一题很重的综合项目。先把这条小判断线带走:
要顺序 -> 想起 list,
固定成对 -> 想起 tuple,
只留不同 -> 想起 set,
名字对应结果 -> 想起 dict。
这就是本章真正想给你的东西:面对数据时,不再只会说出名字,而是开始会问“这份记录最需要哪种形状”。
starter 已经给了你三位来访者、一个架位位置、以及一串重复印记。你要分别补出 arrival_line、locator_card、unique_seals,让它们对应 list、tuple、set。
borrow_log 会重复出现卷轴标题。像上一课那样,在现成的 for title in borrow_log 循环里,先处理“第一次见到这个标题”,再给它加 1,把结果收进 borrow_counts。
运行后,你会同时看到四种结构:有顺序的来访名单、固定位置卡、去重后的印记集合、以及标题对应次数的账本。对照输出再问自己一次:每一条线为什么适合这个形状?
当你拿到一份数据时,先别急着背定义。先问:我最想保留的是顺序、固定组合、唯一成员,还是键值关系?很多时候,结构选择就会自己浮出来。
参考答案点击展开点击收起
first_visitor = "Mira"
second_visitor = "Jun"
third_visitor = "Pip"
shelf_zone = "Fern Wing"
shelf_slot = 3
seal_log = ["sun", "moon", "sun", "leaf", "moon"]
borrow_log = ["Bell Map", "Moss Atlas", "Bell Map", "Star Ledger", "Bell Map", "Moss Atlas"]
arrival_line = [first_visitor, second_visitor, third_visitor]
locator_card = (shelf_zone, shelf_slot)
unique_seals = set(seal_log)
borrow_counts = {}
for title in borrow_log:
if title not in borrow_counts:
borrow_counts[title] = 0
borrow_counts[title] += 1
print("Arrival line:", arrival_line)
print("Locator card:", locator_card)
print("Unique seals:", unique_seals)
print("Borrow counts:", borrow_counts)高级技巧想更进一步?点击展开点击收起
回头看这一章,你已经见过固定组合、拆开固定组合、唯一成员、成员判断、集合关系,以及把标题整理成次数账本。今天这节 checkpoint 不要求你变成理论专家,只要求你开始形成一个更实用的反应:不同任务,适合不同形状。
带着这点结构选择意识进入下一章会很有用。之后你会慢慢接触“函数应该返回什么形状”,而今天先守住更基础的一步:看见小任务时,能为它挑对容器。