开发者

Python equivalent for C++ STL vector/list containers

开发者 https://www.devze.com 2023-02-03 10:26 出处:网络
Is there something similar in Python that I would use for a contain开发者_如何转开发er that\'s like a vector and a list?

Is there something similar in Python that I would use for a contain开发者_如何转开发er that's like a vector and a list?

Any links would be helpful too.


You can use the inbuilt list - underlying implementation is similar to C++ vector. Although some things differ - for example, you can put objects of different type in one and the same list.

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

N.B.: Please keep in mind that vector and list are two very different data structures. List are heterogeneous, i.e. can store different object types, while C++ vectors are homogeneous. The data in vectors is stored in linear arrangement whereas in list is a collection of references to the type and the memory address of the variables.


Have a look at Python's datastructures page. Here's a rough translation:

  1. () => boost::Tuple (with one important distinction, you can't reassign values in a Python tuple)
  2. [] => std::vector (as the comments have aluded towards, lacks memory characteristics associated with vectors)
  3. [] => std::list
  4. {} => tr1::unordered_map or boost::unordered_map (essentially a hash table)
  5. set() => std::set


py cpp
deque deque
PriorityQueue (or you may use heapq) priorityqueue
set unordered_set
list vector
defaultdict(int) unordered_map
list stack
deque queue
dict .get(val,0) unordered_map

in py >= 3.7, dict remember insert order. https://stackoverflow.com/a/51777540/13040423


In case you need TreeMap / TreeSet

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


Lists are sequences.

see http://docs.python.org/tutorial/datastructures.html

append is like push_back, see the other methods as well.


Python also has as part of the standard library an array type which is more efficient and the member type is constrained.

You may also look at numpy (not part of the standard library) if you need to get serious about efficient manipulation of large vectors/arrays.

0

精彩评论

暂无评论...
验证码 换一张
取 消