- collections:数据容器 点这里跳到原文地址。
- 预计阅读时长:10分钟+
- 未完待续,遇到相关力扣题目,会继续补充~
collections 是Python自带的库函数之一,该模块实现了专门的容器数据类型,为 Python 的通用内置容器、dict、list、set 和 tuple 提供了替代方案。
| 函数名称 | 函数作用 |
|---|---|
| namedtuple() | 用于创建具有命名字段的元组子类的工厂函数 |
| deque() | 类似列表的容器,两端都可以增加和弹出 |
| ChainMap() | 用于创建多个映射的单个视图的类 dict 类 |
| Counter() | 用于计算可散列对象的 dict 子类 |
| OrderedDict() | 添加了记住订单条目的 dict 子类 |
| defaultdict() | 调用工厂函数以提供缺失值的 dict 子类 |
| UserDict() | 包装字典对象以便更容易地进行字典子类化 |
| UserList() | 包装列表对象以便更轻松地进行列表子类化 |
| UserString() | 围绕字符串对象进行包装,以便更轻松地进行字符串子类化 |
deque其实就是双端队列功能的扩展,双端队列支持从双端队列的任一侧进行 追加 和 弹出操作。
deque对象支持以下方法:
- append(x):将 x 添加到双端队列的右侧
- appendleft(x):将 x 添加到双端队列的左侧
- clear():从双端队列中删除所有元素,使其长度为 0
- copy():创建双端队列的一个副本
- count(x) :计算双端队列中等于 x 的元素的数量
- extend(iterable):通过附加可迭代参数中的元素来扩展双端队列的右侧
- extendleft(iterable):通过附加来自可迭代的元素来扩展双端队列的左侧。注意,一系列左附加会导致可迭代参数中元素的顺序颠倒
- index(x[, start[, stop]]):返回 x 在双端队列中的位置。如果未找到,则返回第一个匹配项或引发 ValueError
- insert(i, x):将 x 插入到位置 i 的双端队列中
- pop():从双端队列的右侧移除并返回一个元素
- popleft():从双端队列的左侧移除并返回一个元素
- remove(value):删除第一次出现的值
- reverse():原地反转双端队列的元素,然后返回无。
- rotate(n=1):向右旋转双端队列 n 步。如果 n 为负数,则向左旋转。

队列并记录此时队列的大小size(为什么要记录此时队列的大小呢,是因为我们要知道每一层有多少个节点,这样我们才知道我们遍历的是哪一层)。根据size的大小去操作队列的弹出与追加,具体操作如下图所示:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
from collections import deque
class Solution:def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:results = [] # 存放最终的结果if not root:return resultsqueue = deque([root])while queue:size = len(queue)result = []for _ in range(size):cur = queue.popleft()result.append(cur.val)if cur.left:queue.append(cur.left)if cur.right:queue.append(cur.right)results.append(result)return results
ChainMap(*maps)
Counter是用于对可散列对象进行计数的dict子类。它是一个集合,其中元素存储为字典键,其计数存储为字典值。计数可以是任何整数值,包括零计数或负计数。Counter类类似于其他语言中的包或多集。
class Solution:def majorityElement(self, nums: List[int]) -> int:counts = collections.Counter(nums)return max(counts.keys(), key=counts.get)
class Solution:def singleNumber(self, nums: List[int]) -> int:counts = collections.Counter(nums)return min(counts.keys(), key=counts.get)
未完待续~~~。