C++ "multiset<int>"有Python等效物吗?
Is there a Python equivalent for C++ "multiset<int>"?
我正在将一些C++代码移植到Python中,其中一个数据结构是多集的,但我不知道如何在Python中对此进行建模。
设ms
为C++multiset<int>
如何使用ms
(张贴一些示例)
multiset<int>::iterator it = ms.find(x)
ms.erase(it)
ms.insert(x)
ms.end()
ms.lower_bound(x)
ms.clear()
没有。请参见Python';s标准库-是否有用于平衡二叉树的模块?用于Python中C++树容器(map
、set
、multimap
、multiset
)等价物的一般讨论。
我能想到的最接近的方法是使用一个将整数映射到计数(也是整数)的字典。然而,这并不能让你按顺序排列密钥,所以你不能使用lower_bound
进行搜索。另一种选择是使用有序列表,正如其他人已经建议的那样,也许是(integer,count)元组的列表?如果你只需要在完成所有插入后进行搜索,你可以使用字典作为构建的临时结构,在完成所有的插入后构建列表,然后使用列表进行搜索。
有几个排序列表数据类型的实现符合您的标准。两种流行的选择是SortedContainers和blist模块。这些模块中的每一个都提供了一个SortedList数据类型,该类型会自动按排序顺序维护元素,并允许快速插入和下限/上限查找。还有一个性能比较也很有帮助。
使用SortedContainers模块中的SortedList类型的等效代码为:
from sortedcontainers import SortedList
sl = SortedList()
# Start index of `x` values
start = sl.bisect_left(x)
# End index of `x` values
end = sl.bisect_right(x)
# Iterator for those values
iter(sl[start:end])
# Erase an element
del sl[start:end]
# Insert an element
sl.add(x)
# Iterate from lower bound
start = sl.bisect_left(x)
iter(sl[x] for x in range(start, len(sl)))
# Clear elements
sl.clear()
所有这些操作都应该在排序列表数据类型上有效地工作。
有几个数据结构非常接近。
-
python集合:
- 有序dict:dict子类,它可以记住已添加的顺序条目。链接
- Counter:用于计算可散列对象的dict子类。链接
-
由django框架提供:
- 具有多个具有相同值的键的dict:link
- 已排序的dict(已弃用为python集合)现在包括一个已排序dict:link
您可以使用平分函数保持列表的顺序。例如find
将成为
def index(a, x):
'Locate the leftmost value exactly equal to x'
i = bisect_left(a, x)
if i != len(a) and a[i] == x:
return i
raise ValueError
您可以在文档中找到其他等效文件。您现在将获得ValueError
,而不是对照end
进行检查
如果不需要排序,可以将其用作multiset<int>
(或unordered_multiset<int>
):
from collections import Counter
def multiset(array):
return set(Counter(array).items())
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- Pybind11:将元组列表从Python传递到C++
- 如何在c++中使用引用实现类似python的行为
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 递归列出所有目录中的C++与Python与Ruby的性能
- IPC使用多个管道和分支进程来运行Python程序
- 从python中调用C++函数并获取返回值
- Python 3.7 和 excess_args 的 SWIG 问题
- Python中的for循环与C++有何不同
- 使用Pybind11向Python公开Eigen::张量
- EASTL矢量<向量<int>>连续的
- Python str to C++ to Python str
- 如何使用Python从C++中读取谷物序列化数据
- 如何在C++中使用pybind11加载一个pickle python列表
- 如何在c++中使用system()来运行包含空格的python脚本
- python集合的C++等价物是什么.计数器
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 从python调用openMP共享库时,未定义opnMP函数
- 使用JsonCpp将数据返回到带有pybind11的python会在python调用中产生Symbol not foun
- 如何将真正的字符串从python c-api转换为python脚本