Install
pip install sortedcontainers
SortedList
在插入、删除元素后仍然可以自动维护序列的顺序。
from sortedcontainers import SortedList
sl = SortedList()
插入元素
- 插入一整个列表:
SortedList.update(List[val1, val2, ...])
- 插入一个元素:
SortedList.add(value)
删除元素
- 按照元素值删除:
SortedList.remove(value)
,SortedList.discard(value)
- 按照元素索引删除:
SortedList.pop([index])
,SortedList.__delitem__(index)
,del SortedList[index]
- 清空列表:
SortedList.clear()
随机访问 - O(log n)
复杂度
- 查询元素是否存在:
SortedList.__contains__(value)
,value in SortedList
- 查询元素索引:
SortedList.index(value)
- 查询元素数量:
SortedList.count(value)
- 二分查找元素插入位置:
SortedList.bisect_left(value)
,SortedList.bisect_right(value)
- 切片:
SortedList.__getitem__(index)
,SortedList[start:end]
迭代器
- 创建迭代器:
SortedList.__iter__()
,iter(SortedList)
- 反向迭代:
SortedList.__reversed__()
,reversed(SortedList)
- 根据值进行切片:
SortedList.irange(start, end)
- 根据索引进行切片:
SortedList.islice(start, end)
运算符操作
- 数组加和,拼接后排序操作:
SortedList.__add__()
,SortedList1 + SortedList2
- 数组数乘,倍增后排序操作:
SortedList.__mul__()
,SortedList * num
不支持的List类的api
- 赋值操作 -> add
# sl[0] = 1
del sl[0]
sl.add(1)
- 反序api:reverse -> reversed
# sl.reverse()
reversed(sl)
- 增加元素api:append -> add
# sl.append(value)
sl.add(value)
- 合并其他数组api:extend -> update
# sl.extend([val1, val2, ...])
sl.update([val1, val2, ...])
- 插入元素到指定位置api:insert -> add
# sl.insert(5, value)
sl.add(value)