iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python字典和列表性能之间的比较
  • 579
分享到

Python字典和列表性能之间的比较

2024-04-02 19:04:59 579人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

python列表和字典 前面我们了解了 “大O表示法” 以及对不同的算法的评估,下面来讨论下 Python 两种内置数据类型有关的各种操作的大O数量级:列表 list 和字

python列表和字典

  • 前面我们了解了 “大O表示法” 以及对不同的算法的评估,下面来讨论下 Python 两种内置数据类型有关的各种操作的大O数量级:列表 list 和字典dict。
  • 这是 Python 中两种非常重要的数据类型,后面会用来实现各种数据结构,通过运行试验来估计其各种操作运行时间数量级。

对比 list 和 dict 操作如下:

List列表数据类型常用操作性能:

最常用的是:按索引取值和赋值(v=a[i],a[i]=v),由于列表的随机访问特性,这两个操作执行时间与列表大小无关,均为O(1)。

另一个是列表增长,可以选择 append() 和 “+”:lst.append(v),执行时间是O(1);lst= lst+ [v],执行时间是O(n+k),其中 k 是被加的列表长度,选择哪个方法来操作列表,也决定了程序的性能。

测试 4 种生成 n 个整数列表的方法:

创建一个 Timer 对象,指定需要反复运行的语句和只需要运行一次的"安装语句"。

然后调用这个对象的 timeit 方法,指定反复运行多少次。


# Timer(stmt="pass", setup="pass")   # 这边只介绍两个参数
# stmt:statement的缩写,就是要测试的语句,要执行的对象
# setup:导入被执行的对象(就和run代码前,需要导入包一个道理) 在主程序命名空间中  导入
time1 = Timer("test1()", "from __main__ import test1") 
print("concat:{} seconds".fORMat(time1.timeit(1000)))
time2 = Timer("test2()", "from __main__ import test2")
print("append:{} seconds".format(time2.timeit(1000)))
time3 = Timer("test3()", "from __main__ import test3")
print("comprehension:{} seconds".format(time3.timeit(1000)))
time4 = Timer("test4()", "from __main__ import test4")
print("list range:{} seconds".format(time4.timeit(1000))

结果如下:

可以看到,4种方法运行时间差别挺大的,列表连接(concat)最慢,List range最快,速度相差近 100 倍。append要比 concat 快得多。另外,我们注意到列表推导式速度大约是 append 两倍的样子。

总结列表基本操作的大 O 数量级:

我们注意到 pop 这个操作,pop()是从列表末尾移除元素,时间复杂度为O(1);pop(i)从列表中部移除元素,时间复杂度为O(n)。
原因在于 Python 所选择的实现方法,从中部移除元素的话,要把移除元素后面的元素,全部向前挪位复制一遍,这个看起来有点笨拙
但这种实现方法能够保证列表按索引取值和赋值的操作很快,达到O(1)。这也算是一种对常用和不常用操作的折中方案。

list.pop()的计时试验,通过改变列表的大小来测试两个操作的增长趋势:


import timeit

pop_first = timeit.Timer("x.pop(0)", "from __main__ import x")
pop_end = timeit.Timer("x.pop()", "from __main__ import x")
print("pop(0)          pop()")
y_1 = []
y_2 = []
for i in range(1000000, 10000001, 1000000):
    x = list(range(i))
    p_e = pop_end.timeit(number=1000)
    x = list(range(i))
    p_f = pop_first.timeit(number=1000)
    print("{:.6f}        {:.6f}".format(p_f, p_e))
    y_1.append(p_f)
    y_2.append(p_e)

结果如下:

将试验结果可视化,可以看出增长趋势:pop()是平坦的常数,pop(0)是线性增长的趋势。

字典与列表不同,是根据键值(key)找到数据项,而列表是根据索引(index)。最常用的取值和赋值,其性能均为O(1)。另一个重要操作contains(in)是判断字典中是否存在某个键值(key),这个性能也是O(1)。

做一个性能测试试验来验证 list 中检索一个值,以及 dict 中检索一个值的用时对比,生成包含连续值的 list 和包含连续键值 key 的
dict,用随机数来检验操作符 in 的耗时。


import timeit
import random

y_1 = []
y_2 = []
print("lst_time         dict_time")
for i in range(10000, 1000001, 25000):
    t = timeit.Timer("random.randrange(%d) in x" % i, "from __main__ import random, x")
    x = list(range(i))
    lst_time = t.timeit(number=1000)
    x = {j: 'k' for j in range(i)}
    dict_time = t.timeit(number=1000)
    print("{:.6f}        {:.6f}".format(lst_time, dict_time))
    y_1.append(lst_time)
    y_2.append(dict_time)

结果如下:


  • 可见字典的执行时间与规模无关,是常数。
  • 而列表的执行时间则会随着列表的规模加大而线性上升。

更多 Python 数据类型操作复杂度可以参考官方文档:
https://wiki.python.org/moin/TimeComplexity

到此这篇关于Python字典和列表性能之间的比较的文章就介绍到这了,更多相关Python列表和字典内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python字典和列表性能之间的比较

本文链接: https://www.lsjlt.com/news/127746.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python字典和列表性能之间的比较
    Python列表和字典 前面我们了解了 “大O表示法” 以及对不同的算法的评估,下面来讨论下 Python 两种内置数据类型有关的各种操作的大O数量级:列表 list 和字...
    99+
    2024-04-02
  • Python中字典和列表性能的对比分析
    本篇文章为大家展示了Python中字典和列表性能的对比分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Python列表和字典前面我们了解了 “大O表示法” 以及对不同的算法的评估,下面来讨论下 P...
    99+
    2023-06-15
  • python中字典的比较
    今天碰到一个字典比较的问题,就是比较两个字典的大小,其实这个用的不多,用处也没多少,但是还是记录一下。 字典的比较顺序如下: 1、先比较字典的元素的个数,那个多,就哪个大; 2、比较字典的键,在比较字典的键的时候,需要注意的是比较的顺序...
    99+
    2023-01-31
    字典 python
  • python之列表、元组、字典
    1描述 打了激素的数组数组是只能存储同一数据类型的结构列表:可以存储多数数据类型的数组 2 定义列表: 元组和列表的不同:元组是不可变对象而列表是可变对象 3 列表的特性: 1 索引 分为前向索引、反向索引和多重索引 2...
    99+
    2023-01-31
    字典 列表 python
  • Python中列表,元组,字典和集合之间怎么转换
    本篇内容主要讲解“Python中列表,元组,字典和集合之间怎么转换”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python中列表,元组,字典和集合之间怎么转换”吧!前排提示:元祖是错误的写法(...
    99+
    2023-06-30
  • ASP、Unix和Linux:三者之间的实时性能比较
    在Web应用程序的开发中,选择合适的操作系统和编程语言是非常重要的。ASP、Unix和Linux都是常用的Web开发工具,它们在实时性能方面有哪些区别呢?本文将对它们进行详细比较,并穿插演示代码进行讲解。 一、ASP ASP(Active...
    99+
    2023-09-17
    unix linux 实时
  • Python中的列表和元组的性能比较和选择原则是什么?
    Python中的列表和元组的性能比较和选择原则是什么?在Python中,列表和元组是两种常见的数据结构。它们都可以用来存储一组数据,但有一些重要的区别。本文将从性能角度比较列表和元组,并给出选择原则的建议。访问速度:在访问单个元素时,元组的...
    99+
    2023-10-22
    - 列表 (List) - 元组 (Tuple) - 性能比较 (Performance Comparison)
  • Python中优化列表和字典
    Python中优化列表和字典,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在循环内代码:@timeit def append_inside_loop(lim...
    99+
    2023-06-16
  • 怎么加速Python列表和字典
    本篇内容主要讲解“怎么加速Python列表和字典”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么加速Python列表和字典”吧!我们先编写一个装饰器函数来计算函数的执行时间,方便测验不同代码的...
    99+
    2023-06-16
  • python字典和列表嵌套用法
    本篇内容主要讲解“python字典和列表嵌套用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python字典和列表嵌套用法”吧!python中字典和列表的使用,在数据处理中应该是最常用的,这两...
    99+
    2023-06-20
  • Python中列表,元组,字典和集合的区别及它们之间的转换
    目录(1)集合set(2)元组tuple(3)列表list(4)字典dict下面是一些小例子字典的分割、合并list分割、合并前排提示:元祖是错误的写法(带错别字),部分文章写为元祖...
    99+
    2024-04-02
  • Golang 与 Python 的性能比较
    go 在性能上通常优于 python,这归因于其编译性、并发性支持和高效的内存管理。基准测试显示 go 的响应时间更快,而实战案例展示了其在图像处理和科学计算上的优势。 Golang ...
    99+
    2024-05-11
    python golang 标准库
  • 重定向关键字:PHP和JavaScript之间的比较。
    PHP和JavaScript都是流行的编程语言,它们都有自己的优缺点。在本文中,我们将比较PHP和JavaScript,讨论它们之间的相似之处和不同之处。 语法 PHP和JavaScript都是脚本语言,它们的语法有很多相似之处,比如变...
    99+
    2023-10-19
    关键字 重定向 javascript
  • C#、Java和Python性能比较分析
    本篇内容介绍了“C#、Java和Python性能比较分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!实验这里使用三种语言进行矩阵乘法。 矩...
    99+
    2023-06-27
  • Hadoop和spark的性能比较
    本篇内容主要讲解“Hadoop和spark的性能比较”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hadoop和spark的性能比较”吧!  Hadoop和spark的性能比较  Spark在内...
    99+
    2023-06-02
  • 在Python中比较列表的方法
    这篇文章将为大家详细讲解有关在Python中比较列表的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。比较列表在Python中,我们可以对list取交集、差集来比较两个...
    99+
    2024-04-02
  • python 列表,集合和字典的增删改查
    目录一 列表二 集合三 字典总结 一 列表 # 列表:包含0个或多个对象引用的有序队列,用中括号[]表示 # 增加 a = [] a.append(1) # a.append...
    99+
    2024-04-02
  • 揭开 Python 和 Jython 之间的幕布:彻底比较
    Python 是一种流行的高级通用编程语言,以其语法简洁、功能丰富和广泛的库而闻名。Jython 是 Python 的 Java 实现,旨在在 Java 虚拟机 (JVM) 上运行 Python 代码。 兼容性 Jython 与 Pyth...
    99+
    2024-04-02
  • python 使用列表和字典存储信息
    """     作者:白     时间:2018年1月9日     需求:假设你很多汽车,通过不断询问您是否要将车辆添加到您的库存中,     如果您这样做,那么它将会询问汽车的细节。如果没有,应用程序将打印所有汽车的详细信息并退出。   ...
    99+
    2023-01-31
    字典 列表 信息
  • 比较Golang和Python的性能:哪个更高效?
    Golang和Python的性能对比:谁更胜一筹? 随着软件开发行业的迅猛发展,选择一种既高效又适用的编程语言变得尤为重要。本文将探讨两种流行的编程语言——Golang和Python的性能对比,旨在帮助读者了...
    99+
    2024-01-20
    Python Golang 性能比较
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作