当前位置: 首页 > news >正文

网站鉴赏苏州写信小程序开发公司

网站鉴赏,苏州写信小程序开发公司,小制作小发明大全,用什么建设网站Python collections 模块指南(含 C STL 类比) collections 是 Python 标准库中提供的 高性能容器数据类型集合。 对于熟悉 C 的同学,它的很多功能相当于 STL 容器的 Python 版本或变种,尤其在字典、列表、队列等方面有相似之处。一…

Python collections 模块指南(含 C++ STL 类比)

collections 是 Python 标准库中提供的 高性能容器数据类型集合
对于熟悉 C++ 的同学,它的很多功能相当于 STL 容器的 Python 版本或变种,尤其在字典、列表、队列等方面有相似之处。


一、概览(Python vs C++)

Python 类型功能概要C++ STL 类似数据结构
namedtuple带字段名的不可变元组struct(或 std::tuple,加上命名)
deque双端队列,头尾操作 O(1)std::deque
Counter频率计数器(字典子类)std::unordered_map<T,int>
OrderedDict保序字典(插入顺序)std::map(按顺序),或有序 std::vector<pair>
defaultdict带默认值的字典std::unordered_map + 自动初始化逻辑
ChainMap多映射视图(按优先顺序查找)无直接等价,可用多个 map + 查找链逻辑

二、核心类型详解(含 C++ 对应)

1. namedtuple —— 具名元组

具名元组是 不可变的 数据结构,像 tuple 一样低内存,但可以通过名称访问字段。

from collections import namedtuplePoint = namedtuple("Point", ["x", "y"])
p = Point(3, 4)print(p.x, p.y)  # 3 4
print(p[0], p[1])

C++类似

  • 最接近于 struct { int x; int y; };
  • 也可视作 std::tuple<int,int> + 一个额外的接口层来用名字访问。

适用场景

  • 数据对象需要命名字段,且没必要修改(不可变提升安全性和性能)。

2. deque —— 双端队列

deque 支持 O(1) 时间复杂度 的头尾插入/删除,比 list 更高效。

from collections import dequedq = deque([1, 2, 3])
dq.appendleft(0)
dq.append(4)
print(dq)  # deque([0, 1, 2, 3, 4])
dq.popleft()

C++类似

  • std::deque<int>:内部实现通常为分段数组,头尾插入高效。

适用场景

  • 队列、栈、滑动窗口、BFS。

3. Counter —— 计数器

用于统计可迭代对象中每个元素的出现次数。

from collections import Countercnt = Counter("abracadabra")
print(cnt)  # Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})print(cnt.most_common(2))  # [('a', 5), ('b', 2)]

C++类似

  • std::unordered_map<char, int> 用于统计频率。
  • std::map<char,int> 也能做类似工作,只是插入&查找复杂度 O(log n)。

4. OrderedDict —— 有序字典

类似于 std::map,因为 std::map 是有序的(按键排序),但 OrderedDict 是按插入顺序排序。
维护 插入顺序 的映射。
在 Python 3.7+ 普通 dict 也保序,但 OrderedDict 还有额外方法如 move_to_end

from collections import OrderedDictod = OrderedDict()
od["b"] = 2
od["a"] = 1
od.move_to_end("b")

C++类似

  • std::map:按 key 排序存储(API 语义更像平衡树)。
  • 若想按插入顺序,可用 std::vector<pair> 或 boost 的 multi_index_container

5. defaultdict —— 带默认值的字典

访问不存在的键时,自动用工厂函数生成默认值。

from collections import defaultdictd = defaultdict(int)  # 默认为0
d["x"] += 1   # 自动创建 d["x"]=0 再 +1

C++类似

  • std::unordered_map<K,V> + 手动写逻辑:
if (m.find(k) == m.end()) m[k] = V(); // 自动初始化
  • defaultdict(list) 类似:unordered_map<K, vector<V>> 并在访问时自动创建空 vector。

6. ChainMap —— 多映射视图

将多个 dict 视为一个逻辑映射,按顺序查找,直到命中。

from collections import ChainMapdefaults = {"lang": "en", "theme": "light"}
user = {"theme": "dark"}cm = ChainMap(user, defaults)
print(cm["theme"])  # dark

C++类似

  • 没有直接等价的 STL 容器。
  • 可模拟:维护多个 map 引用,查询时按顺序遍历查找。

三、应用场景类比

场景Python collectionsC++ STL 类比
词频统计Counterunordered_map<string, int>
带默认集合/列表分组defaultdict(list)unordered_map<K, vector<T>>
按插入顺序输出映射OrderedDictvector<pair<K,V>> 或 boost
LRU 缓存OrderedDict + move_to_endlist + unordered_map(双向链表法)
BFS队列dequestd::deque
多层配置查找ChainMap手写多 map 顺序查找

四、注意事项(从 C++ 视角)

  1. Python 的字典底层是哈希表,dictunordered_map(查找平均 O(1))。
  2. OrderedDict顺序 不是按 key 排序,而是 插入顺序(不同于 C++ map)。
  3. deque 的索引操作复杂度 O(1),但非连续内存(C++ std::deque 亦如此)。
  4. namedtuple 是不可变的;要修改用 _replace()
    p = p._replace(x=42)
    
  5. Counter 支持加减集合运算,这在 C++ STL 中需要手写。

五、例子:C++ 风格的 Python 词频统计

from collections import Counterdef word_freq(text):words = text.split()freq = Counter(words)for k, v in freq.items():print(f"{k}: {v}")word_freq("a b a c b a")

C++ 中可类比成:

unordered_map<string,int> freq;
for (auto &w : words) freq[w]++;

总结

  • 如果你熟悉 C++ STL,可以把 dict 看作 unordered_mapOrderedDict 看作 带顺序的字典类deque 完全等价于 std::deque
  • defaultdict 相当于省略了 C++ 中反复写的 if(m.count(key)==0) m[key]=V();
  • Counter 就是 unordered_map<T,int> 的封装,并提供了统计排名、集合运算等功能。
http://www.dtcms.com/a/397117.html

相关文章:

  • 关于网站建设方案的案例wordpress与app交互
  • 在线网站转appwordpress学习pdf
  • 怎么建立网站的步骤工业品一站式采购平台
  • 谷歌seo是什么职业seo外包方法
  • seo网站推广排名新网站怎么运营
  • 网站可以备案先提交类别后来改么广东省建设交易中心网站首页
  • 移动端和pc网站wordpress 调用特定分类文章
  • 网站建设汇报评估汉服网站的建设
  • flash制作网站top中信建设有限责任公司招标平台
  • 做类似58类型网站wordpress 阅读次数
  • 搜狗网站收录入口07073游戏网官网
  • 甘肃建设厅网站制作网站最新工具
  • 黑龙江省建设厅官方网站开发平台为用户提供了哪四类应用开发
  • 浙江省永康市建设局网站进不去建筑网站的设计与实现的论文
  • 化工厂建设网站甘肃兰州做网站
  • 网站性能需求服务器不是自己的做违法网站
  • 起名网站建设沈阳高端网页
  • 什么网站没人做千库网ppt模板
  • 交易网站制度建设北京小程序公司
  • 网站服务合同模板网站开发团队哪些人
  • 手机怎样建设网站c++网站开发
  • 做暖暖的视频网站百度输入法
  • 教做美食的视频网站营销策划公司 品牌策划公司
  • 在阿里云做视频网站需要什么老域名购买
  • 文章网站哪里建设好wordpress自动收录
  • 营销型外贸网站制作新冠咳嗽有痰怎么办
  • 企业产品展示网站模板无极最新招聘
  • 实训课网站开发个人小结重庆网站建站价格
  • 免费网站源码下载马鞍山市重点工程建设管理局网站
  • 当前网站开发的语言全运网站的建设