关于python类SortedList详解

目录
  • SortedList 有序序列
    • 方法
      • 1.添加值
      • 2.移除值
      • 3.查找
      • 4.迭代值
      • 5. 其他

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类SortedList详解的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python列表排序 list.sort方法和内置函数sorted用法

    很多时候我们获取到一个列表后,这个列表并不满足我们的需求,我们需要的是一个有特殊顺序的列表. 这时候就可以使用list.sort方法和内置函数sorted,本文就是介绍list.sort方法和sorted内置函数的使用方法和区别. 一.list.sort方法 list.sort方法会就地排序列表,也就是说不会把原列表复制一份.这也是这个方法的返回值是None的原因,提醒您本方法不会新建一个列表. 在这种情况下返回None其实是Python的一个惯例:如果一个函数或者方法对对象进行的是就地改动,那

  • python sort、sorted高级排序技巧

    Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列. 1)排序基础 简单的升序排序是非常容易的.只需要调用sorted()方法.它返回一个新的list,新的list的元素基于小于运算符(__lt__)来排序. 复制代码 代码如下: >>> sorted([5, 2, 3, 1, 4]) [1, 2, 3, 4, 5] 你也可以使用list.sort()方法来排序,此时list本身将被修改.通常此方法不如s

  • python的sorted用法详解

    列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的. 排序,数字.字符串按照ASCII,中文按照unicode从小到大排序 x = [4, 6, 2, 1, 7, 9]x.sort()print (x) # [1, 2, 4, 6, 7, 9] 如果需要一个排序好的副本,同时保持原有列表不变,怎么实现呢? x = [4, 6, 2, 1, 7, 9]y = x[:]y.sort()print(y) # [1, 2, 4, 6, 7,

  • python sorted方法和列表使用解析

    这篇文章主要介绍了python sorted方法和列表使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.基本形式列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的.排序,数字.字符串按照ASCII,中文按照unicode从小到大排序 如果有一个人排序好的副本,同时保持原有的列表不变,怎么实现呢? 注意:y=x通过分片操作将列表x的元素全部拷贝给y,如果简单的把X赋值给Y:

  • 关于python类SortedList详解

    目录 SortedList 有序序列 方法 1.添加值 2.移除值 3.查找 4.迭代值 5. 其他 SortedList 有序序列 class sortedcontainers.SortedList(iterable=None, key=None) 方法 1.添加值 SortedList.add(value) 添加新元素,并排序.时间复杂度O(log(n)). SortedList.update(iterable) 对添加的可迭代的所有元素排序.时间复杂度O(k*log(n)). 2.移除值

  • python 全文检索引擎详解

    python 全文检索引擎详解 最近一直在探索着如何用Python实现像百度那样的关键词检索功能.说起关键词检索,我们会不由自主地联想到正则表达式.正则表达式是所有检索的基础,python中有个re类,是专门用于正则匹配.然而,光光是正则表达式是不能很好实现检索功能的. python有一个whoosh包,是专门用于全文搜索引擎. whoosh在国内使用的比较少,而它的性能还没有sphinx/coreseek成熟,不过不同于前者,这是一个纯python库,对python的爱好者更为方便使用.具体的

  • python自定义异常实例详解

    python自定义异常实例详解 本文通过两种方法对Python 自定义异常进行讲解,第一种:创建一个新的exception类来拥有自己的异常,第二种:raise 唯一的一个参数指定了要被抛出的异常 1.可以通过创建一个新的exception类来拥有自己的异常.异常应该继承自 Exception 类,或者直接继承,或者间接继承. >>>raiseNameError('HiThere') Traceback(most recent call last): File"<pysh

  • Python 登录网站详解及实例

    Python 登录网站详解及实例 对于大部分论坛,我们想要抓取其中的帖子分析,首先需要登录,否则无法查看. 这是因为 HTTP 协议是一个无状态(Stateless)的协议,服务器如何知道当前请求连接的用户是否已经登录了呢?有两种方式: 在URI 中显式地使用 Session ID: 利用 Cookie,大概过程是登录一个网站后会在本地保留一个 Cookie,当继续浏览这个网站的时候,浏览器会把 Cookie 连同地址请求一起发送过去. Python 提供了相当丰富的模块,所以对于这种网络操作只

  • TF-IDF算法解析与Python实现方法详解

    TF-IDF(term frequency–inverse document frequency)是一种用于信息检索(information retrieval)与文本挖掘(text mining)的常用加权技术.比较容易理解的一个应用场景是当我们手头有一些文章时,我们希望计算机能够自动地进行关键词提取.而TF-IDF就是可以帮我们完成这项任务的一种统计方法.它能够用于评估一个词语对于一个文集或一个语料库中的其中一份文档的重要程度. 在一份给定的文件里,词频 (term frequency, T

  • zookeeper python接口实例详解

    本文主要讲python支持zookeeper的接口库安装和使用.zk的python接口库有zkpython,还有kazoo,下面是zkpython,是基于zk的C库的python接口. zkpython安装 前提是zookeeper安装包已经在/usr/local/zookeeper下 cd /usr/local/zookeeper/src/c ./configure make make install wget --no-check-certificate http://pypi.python

  • 正则表达式+Python re模块详解

    正则表达式(Regluar Expressions)又称规则表达式,在代码中常简写为REs,regexes或regexp(regex patterns).它本质上是一个小巧的.高度专用的编程语言. 通过正则表达式可以对指定的文本实现 匹配测试.内容查找.内容替换.字符串分割 等功能. re模块介绍 Python中的re模块提供了一个正则表达式引擎接口,它允许我们将正则表达式编译成模式对象,然后通过这些模式对象执行模式匹配搜索和字符串分割.子串替换等操作.re模块为这些操作分别提供了模块级别的函数

  • Django用数据库表反向生成models类知识点详解

    Django根据已有数据库表反向生成models类 一. 创建一个Django项目 django-admin startproject 'xxxx' 二.修改settings文件 在setting里面设置你要连接的数据库名称,地址,账号密码之类的信息,和创建新项目的时候一致 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'djangodemo', # 数据库名称 'USER': 'root', '

  • scrapy处理python爬虫调度详解

    学习了简单的知识点,就会想要向有难度的问题挑战,这里必须要夸一夸小伙伴们.不过我们今天不需要做什么程序的测试,只用简单的两个代码对比,小伙伴们就能在其中体会两者的不同和难易程度.scrapy能否适合处理python爬虫调度的问题,小编直接说出答案小伙伴们也不能马上信服,下面就让我们在示例中找寻答案吧. 总的来说,需要使用代码来爬一些数据的大概分为两类人: 非程序员,需要爬一些数据来做毕业设计.市场调研等等,他们可能连 Python 都不是很熟: 程序员,需要设计大规模.分布式.高稳定性的爬虫系统

  • Python self用法详解

    在定义类的过程中,无论是显式创建类的构造方法,还是向类中添加实例方法,都要求将 self 参数作为方法的第一个参数.例如,定义一个 Person 类: class Person: def __init__(self): print("正在执行构造方法") # 定义一个study()实例方法 def study(self): print(self,"正在学Python") zhangsan = Person() zhangsan.study() lisi = Pers

随机推荐