唯一收藏架
取完卷轴后,Hoppy 来到回收标签台。这里堆着一把从旧架子上摘下来的发光标签,同样的架位标记一遍又一遍地重复出现。
如果 Hoppy 只是想知道“到底有哪些不同标签”,这些重复亮光就会变成噪音。接下来的目标不是排序,也不是记住谁先出现,而是先整理出唯一成员。这就是 set 登场的时刻:当重复挡住视线,而唯一性才是重点时,它特别好用。
set 只留下唯一成员
set 是一种用来保留不同成员的结构。同一个标签出现三次,并不代表它是三个不同成员。如果你的任务只是登记“出现过哪些标签”,那保留一份就够了。
reclaimed_tags = ["A-7", "B-2", "A-7", "C-1"]
print("Returned tags:", reclaimed_tags)
unique_tags = set(reclaimed_tags)
print("Unique shelf tags:", unique_tags)
这个列表先把回收来的原始标签如实摆出来。变成 set 之后,留下的就只有不同标签。你这节课最需要抓住的感觉就是:这次不是在排一串东西,而是在收集“有哪些成员存在”。
为什么这里顺序不再是重点
list 和 tuple 都很适合处理“位置有意义”的情况。但这节课面对的是另一个问题。Hoppy 现在不是在问:“哪个标签最先回来?” Hoppy 现在问的是:“到底出现过哪些架位标签?”
所以这里的结果会是一个 set。set 关心的是成员是否独特,而不是把每一次重复出现都按顺序留下来。那些重复标签现在已经不再提供新的信息,它们只是重复噪音。
starter 先给了你 reclaimed_tags,里面故意保留了重复标签。把这行留着,因为你要拿它和整理后的结果做对比。
把占位线改成真正的 set(...) 调用,并把结果存进 unique_tags。
你会先看到原始的重复列表,再看到只保留一次的 set。这里不用纠结 set 打印时的顺序。真正重要的是:重复项不见了。
这里真正新的东西,不只是“又一种括号写法”。更重要的是一种新的判断方式:当真实任务是“先留下有哪些成员”时,set 会比把每次重复位置都当回事的结构更贴切。
参考答案点击展开点击收起
reclaimed_tags = ["B-12", "A-3", "B-12", "C-9", "A-3"]
print("Returned tags:", reclaimed_tags)
unique_tags = set(reclaimed_tags)
print("Unique shelf tags:", unique_tags)高级技巧想更进一步?点击展开点击收起
现在你还不需要学成员判断,也不用学集合之间的关系。先把一个画面记住就够了:一堆带重复项的材料进来,set 会只留下不同成员。
这个新直觉很重要,因为 Python 里不同结构适合不同目标。有时候你关心顺序,有时候你关心固定位置;而有时候,你只是想知道“哪些东西出现过”。