Python中C++ STL vector/list容器的等效实现

22 投票
6 回答
44615 浏览
提问于 2025-04-16 09:38

Python中,有没有类似于向量和列表的容器可以使用呢?

如果有相关的链接也请分享一下。

6 个回答

7
Python C++
双端队列(deque) 双端队列(deque)
优先队列(PriorityQueue,或者你可以用heapq) 优先队列(priorityqueue)
集合(set) 无序集合(unordered_set)
列表(list) 向量(vector)
默认字典(defaultdict(int)) 无序映射(unordered_map)
列表(list) 栈(stack)
双端队列(deque) 队列(queue)
字典的.get(val,0) 无序映射(unordered_map)
数组(array) 数组(array)
numpy数组(np.array) 值数组(valarray)

值数组(valarray)是简易版的numpy数组(np.array)。

在Python 3.7及以上版本中,字典会记住插入的顺序。https://stackoverflow.com/a/51777540/13040423


如果你需要树映射(TreeMap)或树集合(TreeSet)

https://github.com/grantjenks/python-sortedcontainers

12

看看Python的数据结构页面。这里有个大概的翻译:

  1. () => boost::Tuple(有一个重要的区别,就是在Python的元组里,你不能重新赋值)
  2. [] => std::vector(正如评论中提到的,它缺少与向量相关的内存特性)
  3. [] => std::list
  4. {} => tr1::unordered_map 或者 boost::unordered_map(基本上就是一个哈希表)
  5. set() => std::set
13

你可以使用内置的列表,它的底层实现跟C++的向量(vector)很相似。不过,有些地方是不同的,比如你可以在同一个列表里放不同类型的对象。

http://effbot.org/zone/python-list.htm

注意:请记住,向量和列表是两种非常不同的数据结构。列表是异构的,也就是说可以存储不同类型的对象,而C++的向量是同构的。向量里的数据是以线性排列的方式存储的,而列表则是一个对变量类型和内存地址的引用集合。

撰写回答