Python中C++ STL vector/list容器的等效实现
在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)
12
看看Python的数据结构页面。这里有个大概的翻译:
- () => boost::Tuple(有一个重要的区别,就是在Python的元组里,你不能重新赋值)
- [] => std::vector(正如评论中提到的,它缺少与向量相关的内存特性)
- [] => std::list
- {} => tr1::unordered_map 或者 boost::unordered_map(基本上就是一个哈希表)
- set() => std::set
13
你可以使用内置的列表,它的底层实现跟C++的向量(vector)很相似。不过,有些地方是不同的,比如你可以在同一个列表里放不同类型的对象。
http://effbot.org/zone/python-list.htm
注意:请记住,向量和列表是两种非常不同的数据结构。列表是异构的,也就是说可以存储不同类型的对象,而C++的向量是同构的。向量里的数据是以线性排列的方式存储的,而列表则是一个对变量类型和内存地址的引用集合。