Python中的list和tuple两种类型采用了顺序表的实现技术,tuple是不可变类型,即不变的顺序表,因此不支持改变其内部状态的任何操作,而其他方面,则与list的性质类似。

list的基本实现技术

Python标准类型list就是一种元素个数可变的线性表,可以加入和删除元素,并在各种操作中维持已有元素的顺序(即保序),而且还具有以下行为特征:

1)基于下标(位置)的高效元素访问和更新,时间复杂度应该是O(1);为满足该特征,应该采用顺序表技术,表中元素保存在一块连续的存储区中。

2)允许任意加入元素,而且在不断加入元素的过程中,表对象的标识(函数id得到的值)不变。为满足该特征,就必须能更换元素存储区,并且为保证更换存储区时list对象的标识id不变,只能采用分离式实现技术。

在Python的官方实现中,list就是一种采用分离式技术实现的动态顺序表。这就是为什么用list.append(x) (或 list.insert(len(list), x),即尾部插入)比在指定位置插入元素效率高的原因。

在Python的官方实现中,list实现采用了如下的策略:在建立空表(或者很小的表)时,系统分配一块能容纳8个元素的存储区;在执行插入操作(insert或append)时,如果元素存储区满就换一块4倍大的存储区。但如果此时的表已经很大(目前的阀值为50000),则改变策略,采用加一倍的方法。引入这种改变策略的方式,是为了避免出现过多空闲的存储位置。

List对象的C结构

Python中list是用下边的C语言的结构来表示的。ob_item是用来保存元素的指针数组,allocated是ob_item预先分配的内存总容量

typedef struct{

PyObject_VAR_HEAD

PyObject**ob_item;

Py_ssize_t allocated;

} PyListObject;

python顺序表的实现_python中的顺序表相关推荐

  1. python flask 表单提交_python中flask应用(表单处理)

    本篇文章给大家带来的内容是关于python中flask应用(表单处理),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.为什么使用Flask-WTF? request对象公开了所有 ...

  2. python读取字典元素笔记_Python中列表、字典、元组数据结构的简单学习笔记

    列表 列表是Python中最具灵活性的有序集合对象类型.与字符串不同的是,列表可以包含任何类型的对象:数字.字符串甚至其他列表.列表是可变对象,它支持原地修改的操作. Python的列表是: 任意对象 ...

  3. python双等号怎么输入_python中的星号‘*’和双星号‘**’的解说

    一直以来,对于python中函数参数传递过程中出现的*和**,理解的稀里糊涂的.最近看了一篇博文,描述的非常清楚,所以自己也抽空写了一下,可以整理一下自己的思路,也可以帮助到像我一样的白白小学生. p ...

  4. python新式类c3算法_python中的MRO和C3算法

    一. 经典类和新式类 1.python多继承 在继承关系中,python子类自动用友父类中除了私有属性外的其他所有内容.python支持多继承.一个类可以拥有多个父类 2.python2和python ...

  5. python输出自己的名字_python中 将你的名字转化成为二进制并输出

    1 name = "吴彦祖" 2 for i in name: 3 i_by = bytes(i, encoding = "utf-8") 4 for i_bi ...

  6. python函数拟合不规则曲线_python中的多变量(多项式)最佳拟合曲线?

    接受的答复 this question 提供了 a small multi poly fit library,它将使用numpy完成所需的任务,您可以将结果插入到绘图中,如下所述. 您只需将x和y点的 ...

  7. python里的join方法_python中join()方法介绍

    描述 Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串. 语法 join()方法语法: str . join ( sequence ) 参数 sequence -- ...

  8. python常用函数的用法_python中常用函数整理

    1.map map是python内置的高阶函数,它接收一个函数和一个列表,函数依次作用在列表的每个元素上,返回一个可迭代map对象. class map(object):""&qu ...

  9. python怎么用第三方库_python中第三方库的下载方法

    1.最常用:在命令行中输入  pip install "库名称"  例如 pip install gensim 查看pip的命令集: pip uninstall "库名& ...

最新文章

  1. Linux tcpdump命令详解与Wireshark
  2. Tomcat 系统架构与设计模式,第 1 部分: 工作原理
  3. 8-Mybatis 的动态 SQL 语句
  4. php集合与数组的区别,php数组和链表的区别总结
  5. 类的自动转换和强制类型转换
  6. 奇安信荣获中国电子2021年度科技进步奖一、二等奖
  7. [lua]紫猫lua教程-命令宝典-L1-01-11. lua的个人补充
  8. AD16导出Gerber文件教程
  9. 参加2022年7月PMP考试后感受
  10. 【Web技术】969- 如何实现高性能的在线 PDF 预览
  11. [含论文+答辩PPT+任务书+中期检查表+源码等]基于ssm的NBA球队管理系统
  12. 计算机网络管理员操作技能考试试卷操作,计算机网络管理员高级工操作技能考核试卷(第一套)...
  13. word目录中英文开头目录不对齐
  14. python删除数组元素_如何删除numpy数组中的特定元素
  15. OutMan——Objective-C中的ARC介绍和block的使用
  16. JavaScript调用pc和手机摄像头
  17. 纯真IP/ZXinc_IPv6数据库镜像及MySQL脚本更新同步更新 for Python 3.x
  18. MATLAB的appdesigner背景图片设置
  19. 从架构到算法到赋能业务,关于国际化电商技术链路的最完整分享【Lazada技术开放日】
  20. WEB开发碰到的问题及经验十八则

热门文章

  1. InputStreamReader和OutputStreamWriter
  2. java二进制命令_Java二进制指令代码解析
  3. 虚拟机Centos报corruption of in-memory data detected错误的恢复
  4. Oracle主库、备库redo日志管理
  5. java中math的方法_Java Math所有方法
  6. 学前教育与计算机,计算机与幼儿教育
  7. elman神经网络_西瓜书第五章——神经网络
  8. 电子商务网站中订单号设计规则和依据
  9. Android Studio 3.4升级后的运行问题解决办法
  10. c语言函数操作一维数组