Counter 与 defaultdict 实战
统计项目而不产生缺少键的错误
Counter 与 defaultdict 实战 是 CoddyKit 上的免费 Coding Interview Prep 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Coding Interview Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Coding Interview Prep 课程共包含 4 节课。
计数变简单
统计元素出现的频率是竞赛中的常见任务。集合模块提供了两个工具,让计数变得轻松。🧮
缺失键问题
当您递增一个尚不存在的键时,普通字典会抛出 KeyError。特殊的数据结构可以替您消除这个麻烦。
认识计数器
计数器可以用一行代码统计任意可迭代对象,为每个元素记录其出现频率。不存在的键会被简单地视为 0。
from collections import Counter
freq = Counter(nums)读取计数
像字典一样通过索引访问计数器,但读取不存在的键时会返回 0,而不是导致程序崩溃。这样查找就完全安全了。
print(freq[5])
print(freq[999])出现次数最多的元素
调用 most_common,即可获取按计数从高到低排序的元素。传入一个数字,可以限制返回的前几项数量。
top3 = freq.most_common(3)计数器也能运算
您可以对两个计数器进行add或减法运算来合并统计结果。它会自动合并相同的键,并使总数保持对应。
total = Counter(a) + Counter(b)认识默认字典
默认字典会为每个新键提供一个全新的默认值,因此您无需先检查键是否存在。您只需要为它指定默认工厂。
from collections import defaultdict
count = defaultdict(int)无需保护即可递增
使用默认字典(整数)时,不存在的键会从 0 开始,因此可以直接递增。这样循环中就不需要用条件判断来增加干扰。
for v in nums:
count[v] += 1默认使用列表
当每个键需要收集多个值时,请使用默认字典(列表)。向全新的键执行追加操作时,会自动从一个新的空列表开始。
groups = defaultdict(list)
groups[key].append(item)计数器还是默认字典
如果只需要统计元素,请使用计数器;如果每个键需要对应列表、集合或自定义默认值,请使用默认字典。🎯
一行判断字母异位词
两个单词的计数器相等,当且仅当它们是字母异位词。这种比较可以一次处理每个字母的出现频率。
is_anagram = Counter(s) == Counter(t)快速检查
您希望在安全递增缺失键的同时统计出现次数。
回顾
计数器可以即时统计并排列元素;默认字典则免去了统计、收集列表或集合时检查缺失键的步骤。两者都能消除冗余代码。🚀
常见问题解答
「Counter 与 defaultdict 实战」课时是免费的吗?
是的 — 「Counter 与 defaultdict 实战」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Coding Interview Prep 课程的其余内容,请升级到 CoddyKit PRO。 Coding Interview Prep 课程共包含 4 节课。
「Counter 与 defaultdict 实战」这节课中我会学到什么?
统计项目而不产生缺少键的错误 你通过在浏览器中直接运行的动手代码来练习 Coding Interview Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Coding Interview Prep 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Coding Interview Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「Counter 与 defaultdict 实战」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Coding Interview Prep 课中编写并运行代码吗?
能。每节 Coding Interview Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 使用集合判断成员关系与去重
- 将字典用作查找表
- Counter 与 defaultdict 实战
- 使用映射分组与装桶