文章目录

  • python 数据类型的性能
  • 列表常用操作
    • 使用timeit模块对函数计时
    • 列表基本操作的复杂度
  • 字典数据类型
  • python官方的算法复杂度网站

python 数据类型的性能

在python语法精讲中我们讲了python基础数据类型,这里我们来讨论下python两种内置数据类型在各种操作上的时间空间复杂度。

  • 列表 list
  • 字典 dict
类型 list dict
索引 自然数i key
添加 append、extend、insert D[key]=v
删除 pop、remove pop
更新 ls[i] =v D[key]=v
正查 ls[i]、ls[i:j] D[key]、copy
反查 index(v)、count(v) 没有
其它 reverse、sort has_key、update

列表常用操作

由于列表的随机访问特性,

  • var = ls[i] 和 ls[i] = v 这两个操作的执行时间与列表大小无关,均为O(1);
  • ls.append(v)执行时间是O(1)
  • ls = ls + [ls_1] 执行时间是O(n+k)

生成列表的4个方法

def test_1():l = []for i in range(1000):l = l + [i]def test_2():l = []for i in range(1000):l.append(i)def test_3():l = [i for i in range(1000)]def test_4():l = list(range(1000))

使用timeit模块对函数计时

from timeit import Timert1 = Timer('test_1()','from __main__ import test_1')
print('concat %f s\n' % t1.timeit(number=1000))t2 = Timer('test_2()','from __main__ import test_2')
print('append %f s\n' % t2.timeit(number=1000))t3 = Timer('test_3()','from __main__ import test_3')
print('comprehension %f s\n' % t3.timeit(number=1000))t4 = Timer('test_4()','from __main__ import test_4')
print('list %f s\n' % t4.timeit(number=1000))
输出结果:
concat 1.138047 s
append 0.049819 s
comprehension 0.028476 s
list 0.012456 s

列表基本操作的复杂度

操作 复杂度
index[ ] O(1)
append O(1)
pop O(1)
pop(i) O(n)
insert(i) O(n)
sort O(n log n)

我们可以看到pop这两种操作的复杂度差别非常的大。原因在于,从中部移除元素的话,要把移除元素后面的元素全部向前挪位复制一遍,这种方法保证列表按索引取值和赋值操作很快,是O(1)。
有兴趣的可以用上面的方法来验证一下pop指令的两种删除的操作复杂度;

ls = list(range(10000))
pop_one = timeit.Timer('ls.pop(1)', 'from __main__ import ls')
print('%f s\n' % pop_one.timeit(number=1000))
pop_end = timeit.Timer('ls.pop()', 'from __main__ import ls')
print('%f s\n' % pop_end.timeit(number=1000))

字典数据类型

字典与列表不同,字典是根据键(key)来获取数据项的。
所以字典存入数据和查找数据都是O(1);判断是否在dict.keys()(是否在字典的键中)的操作也是O(1)复杂度。
字典中的数据的存储是无序的。

python官方的算法复杂度网站

python官方的算法复杂度https://wiki.python.org/moin/TimeComplexity

python数据类型的性能相关推荐

  1. [003]python数据类型一__python_全栈基础

    您好!此笔记的文本和代码以网盘形式分享于文末! 因个人能力有限,错误处欢迎大家交流和指正!基础部分内容简单,但多且零散!                                        ...

  2. 以下选项中不是python数据类型的是_以下选项中,是Python数据类型的是()。

    以下选项中,是Python数据类型的是(). 在Excel中,函数SUM(A1:A4)等价于()A:SUM(A1/A4)B:SUM(A1+A2+A3+A4)C:SUM(A1:A4)D:SUM(A1A2 ...

  3. Python 数据类型

    Python主要数据类型包括list(列表).tuple(元组).dict(字典)和set(集合)等对象,下面逐一介绍这些Python数据类型. list(列表)是Python内置的一种数据类型,作为 ...

  4. python中用于标识字符串的定界符_Python合集之Python数据类型(二)

    在上一节的合集中,我们了解了Python数据类型中的数值类型的相关知识,本节我们将进一步了解一下Python中关于数据类型中的字符串及布尔类型相关的知识. 1. 字符串类型 字符串是连续的字符序列,可 ...

  5. python数据类型-Python语言基本数据类型

    本文主要向大家介绍了Python语言基本数据类型,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. python标准数据类型 有六个标准的数据类型: 1.Number(数字) 2.S ...

  6. Python 数据类型及其用法

    本文总结一下Python中用到的各种数据类型,以及如何使用可以使得我们的代码变得简洁. 基本结构 我们首先要看的是几乎任何语言都具有的数据类型,包括字符串.整型.浮点型以及布尔类型.这些基本数据类型组 ...

  7. CrazyWing:Python自动化运维开发实战 九、Python数据类型之列表

    导语 序列: 序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推,Python已经内置确定序列的长度以及确定最大和最小 ...

  8. python中判断列表数据类型_浅谈Python数据类型判断及列表脚本操作

    数据类型判断 在python(版本3.0以上)使用变量,并进行值比较时.有时候会出现以下错误: TypeError: unorderable types: NoneType() < int() ...

  9. set集合判断集合中是否有无元素_集合 (Set) | 一山不容二虎的 Python 数据类型

    点击上方"可乐python说"关注公众号,点击右上角 "..."选择"设为星标"第一时间获取最新分享! 前言 Hi,大家好,我是可乐, 今天 ...

最新文章

  1. 【Qt】错误GL/gl.h: No such file or directory的解决方法(以及cannot find -lGL解决方法)
  2. ubuntu 18.04.4 - 显示文件路径
  3. 可穿戴的脑机接口设备将运动意念转化为行动
  4. 如何让机器说话更像人?清华和京东的三位大牛给出答案 | CCF C³
  5. android 刷机 备份,安卓刷机后如何还原以前ROM和系统备份
  6. influxDB和grafana
  7. 年月日_C++计算输入的年月日是这一年的第几天
  8. c++ 函数过长 拆分_实用EXECL办公函数 【多条件排名】
  9. python函数参数学习_python函数学习1
  10. SQL2008无法连接到(local),该账户当前被锁定,所以Sa用户登陆失败
  11. html 文本第一行显示,html – 在第一行后更改文本对齐
  12. ECSHOP首页调用指定分类推荐商品/热卖商品/新品商品
  13. 知识图谱商业应用 、介绍
  14. 51蜂鸣器播放提示音和音乐(完整代码可附赠Proteus仿真)
  15. uni-app 小程序开发 (一)
  16. laravel的seeder数据填充
  17. 计算机视觉SIFT算法详解
  18. 父类对象指向子类引用
  19. java生成算数表达式_惊!小学生要失业了,Java实现生成并计算四则运算表达式。...
  20. 使用git log统计代码行数

热门文章

  1. 八字-十天干、十二地支、六十甲子
  2. Synchronized 同步锁详解
  3. Swin Transformer 不重叠窗口
  4. 《2022 大数据技术与架构视频合集》附PPT和文档,限时下载
  5. C#毕业设计——基于C#+asp.net+sqlserver的设备管理系统设计与实现(毕业论文+程序源码)——设备管理系统
  6. Excel VBA:设置单元格边框
  7. 如何在网页中设置一个定时器计算时间?
  8. 【web】HTTP(s)协议详解(重点:HTTPS 的加密过程浏览器中输入网址后,发生了什么?)
  9. Handlebars.js的下载及使用示例
  10. 极大似然估计原理详细说明