深入了解Python中SortedList类

Admin 2021-10-16 群英技术资讯 743 次浏览

    今天给大家分享的是Python中SortedList类的内容,对大家学习或者巩固python类的基础知识有一定的帮助,有这方面学习需求的朋友可以了解看看,那么接下来就跟随小编来学习一下吧。

SortedList 有序序列

class sortedcontainers.SortedList(iterable=None, key=None)

方法

1.添加值

  • SortedList.add(value) 添加新元素,并排序。时间复杂度O(log(n)).
  • SortedList.update(iterable) 对添加的可迭代的所有元素排序。时间复杂度O(k*log(n)).

2.移除值

  • SortedList.clear() 移除所有元素。时间复杂度O(n).
  • SortedList.discard(value) 移除一个值元素,如果元素不存在,不报错。时间复杂度O(log(n)).
  • SortedList.remove(value) 移除一个值元素,如果元素不存在,报错ValueError。时间复杂度O(log(n)).
  • SortedList.pop(index=-1) 移除一个指定下标元素,如果有序序列为空或者下标超限,报错IndexError. 时间复杂度O(log(n

3.查找

  • SortedList.bisect_left(value) 查找元素可以插入的位置下标,如果这个value已经存在,则插入已经存在的所有values之前(左侧).时间复杂度O(log(n)).
s = SortedList([1,2,3,9,8,6,5,5,5,5,5])
s.bisect_left(5)
Out[5]: 3
s
Out[6]: SortedList([1, 2, 3, 5, 5, 5, 5, 5, 6, 8, 9])
  • SortedList.bisect_right(value) 查找元素可以插入的位置下标,如果这个value已经存在,则插入已经存在的所有values之后(右侧)。时间复杂度O(log(n)).
s.bisect_right(5)
Out[7]: 8
s
Out[8]: SortedList([1, 2, 3, 5, 5, 5, 5, 5, 6, 8, 9])
  • SortedList.count(value) 查找元素出现的次数。时间复杂度O(log(n)).
s.count(5)
Out[9]: 5
  • SortedList.index(value, start=None, Stop=None) 查找索引范围[start,stop)内第一次出现value的索引,如果value不存在,报错ValueError. 时间复杂度O(log(n)).

4.迭代值

  • SortedList.irange(minimun=None, maximum=None, inclusive=True, True, reverse=False) 返回value=[minimun,maximum]之间的可迭代值,inclusive = Ture, True 第一个True表示包括索引minimun, 第二个Ture表示包括索引maximum,reverse是表示返回的可迭代值是否反转。
  • SortedList.islice(start=None, stop=None, reverse=False) 返回index=[start, stop)之间的可迭代值(切片)。

5. 其他

  • SortedList.copy() 返回一个浅拷贝有序序列。时间复杂度O(n)。

浅拷贝(1)直接赋值,默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的列表也会做相同的改变。

a = [1,2,3]
b=a
b
Out[60]: [1, 2, 3]
a[0]=0
a
Out[62]: [0, 2, 3]
b
Out[63]: [0, 2, 3]

浅拷贝(2)copy函数,浅拷贝传递对象的引用,原始数据改变,只有子对象会改变。

a = [[1],2,3]
b = a.copy()
a
Out[85]: [[1], 2, 3]
b
Out[86]: [[1], 2, 3]
# 对象不改变
a.append(4)
a
Out[88]: [[1], 2, 3, 4]
b
Out[89]: [[1], 2, 3]
# 子对象跟着改变
a[0].append(2)
a
Out[91]: [[1, 2], 2, 3, 4]
b
Out[92]: [[1, 2], 2, 3]

    关于Python中SortedList类就介绍到这,希望本文能对大家有帮助,想要了解更多python类的知识,大家可以关注群英网络其它相关文章。

文本转载自脚本之家

群英智防CDN,智能加速解决方案

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

猜你喜欢

成为群英会员,开启智能安全云计算之旅

立即注册
专业资深工程师驻守
7X24小时快速响应
一站式无忧技术支持
免费备案服务
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
在线客服
微信公众号
返回顶部
返回顶部 返回顶部
在线客服
在线客服