Python列表和集合的效率大比拼

 更新时间:2022年07月20日 15:58:34   作者:Python编程学习圈  
程序的运行效率分为两种:第一种是时间效率,第二种是空间效率,这篇文章主要介绍了Python列表和集合的效率对比,需要的朋友可以参考下

程序运行效率

程序的运行效率分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。时间复杂度主要衡量的是一个程序的运行速度,而空间复杂度主要衡量一个程序所需要的额外存储空间。

一个程序执行所耗费的时间,从理论上说,是不能算出来的,只有你把程序放在机器上跑起来,才能知道,不同机器不同时间得出的结果可能不一样。但是我们需要每个程序都上机测试吗?显然不现实,所以才有了时间复杂度这个分析方式。实际中我们计算时间复杂度时,其实并不一定要计算精确的执行次数,而只需要大概执行次数,一般会使用大O渐进表示法,平时执行次数为1次的我们就可以说时间复杂度是O(1),需要n次的就可以说时间复杂度是O(n)。

空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度。空间复杂度不是程序占用了多少个字节的空间,因为这个实际运行过程中很难计算,所以空间复杂度算的是变量的个数。空间复杂度计算规则基本跟时间复杂度类似,也使用大O渐进表示法。

Python组合数据类型中常用的主要有元组、列表、集合和字典,每种数据类型不同操作的时间复杂度可以参考Python的官方链接,网页中有详细的说明,

元组和列表都属于序列类型,他们存储机制基本一致;集合和字典也是基本相同,唯一的区别就是集合每个元素没有对应的值。接下来我们以集合和列表为例看看他们的查找效率和存储开销。

数据查找效率

关于集合和列表数据查找效率差距到底有多大?先看一组实例:

import time
import random
nums = [random.randint(0, 2000000) for i in range(1000)]
list_test = list(range(1000000))
set_test = set(list_test)
count_list, count_set = 0, 0
t1 = time.time()  # 测试在列表中进行查找
for num in nums:
   if num in list_test:
       count_list += 1
t2 = time.time()
for num in nums:  # 测试在集合中进行查找
   if num in set_test:
       count_set += 1
t3 = time.time()  # 测试在集合中进行查找
print('找到个数,列表:{},集合:{}'.format(count_list, count_set))
print('使用时间,列表:{:.4f}s'.format(t2 - t1))
print('使用时间,集合:{:.4f}s'.format(t3 - t2))

输出结果为:

找到个数,列表:515,集合:515
使用时间,列表:7.7953s
使用时间,集合:0.0010s

从上面例子可以清楚地看出,集合的查找效率远远高于列表,因此在不同的应用场景下,一定要选择合适的数据类型,在小数据量下看不出来性能区别,一旦换到大数据量下,就会变得差异性很大。

数据存储开销

集合的查找效率比列表要快得多,主要就是他们的存储原理不一样,集合需要消耗更多的空间来存储额外的信息,用空间开销来换时间效率,接下来我们通过getsizeof()函数看看他们存储开销的差异,getiszeof()函数是python的sys模块中用来获取对象内存大小的函数,返回的大小以字节为单位。

import sys
import random
list_test = list(range(1000000))
set_test = set(range(1000000))
print('列表占用大小:', sys.getsizeof(list_test))
print('集合占用大小:', sys.getsizeof(set_test))

输出结果为:

列表占用大小:9000112
集合占用大小:33554656

从结果可以看出,同样的数据内容,集合存储的开销是列表的好几倍。

到此这篇关于Python列表和集合的效率对比的文章就介绍到这了,更多相关Python列表和集合内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python  pip安装lxml出错的问题解决办法

    Python pip安装lxml出错的问题解决办法

    这篇文章主要介绍了Python pip安装lxml出错的问题解决办法的相关资料,需要的朋友可以参考下
    2017-02-02
  • Python实现滑块拼图验证码详解

    Python实现滑块拼图验证码详解

    验证码作为一种自然人的机器人的判别工具,被广泛的用于各种防止程序做自动化的场景中。传统的字符型验证安全性已经名存实亡的情况下,各种新型的验证码如雨后春笋般涌现,今天给大家分享一篇Python实现滑块验证码
    2022-05-05
  • Django+Bootstrap实现计算器的示例代码

    Django+Bootstrap实现计算器的示例代码

    本文主要介绍了Django+Bootstrap实现计算器的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • pandas loc与iloc用法及区别

    pandas loc与iloc用法及区别

    本文主要介绍了pandas loc与iloc用法及区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Python NumPy库安装使用笔记

    Python NumPy库安装使用笔记

    这篇文章主要介绍了Python NumPy库安装使用笔记,本文讲解了NumPy的安装和基础使用,并对每一句代码都做了详细解释,需要的朋友可以参考下
    2015-05-05
  • Win10+GPU版Pytorch1.1安装的安装步骤

    Win10+GPU版Pytorch1.1安装的安装步骤

    这篇文章主要介绍了Win10+GPU版Pytorch1.1安装的安装步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 基于Python实现简单的汉字拼音转换工具

    基于Python实现简单的汉字拼音转换工具

    将汉字转为拼音,可以用于批量汉字注音、文字排序、拼音检索文字等常见场景。现在互联网上有许多拼音转换工具,基于Python的开源模块也不少,本文将利用pypinyin模块制作简单的汉字拼音转换工具,感兴趣的可以了解一下
    2022-09-09
  • python利用requests库模拟post请求时json的使用教程

    python利用requests库模拟post请求时json的使用教程

    这篇文章主要介绍了python利用requests库模拟post请求时json的使用 ,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-12-12
  • python依赖安装两种常用方式

    python依赖安装两种常用方式

    这篇文章主要给大家介绍了关于python依赖安装两种常用方式的相关资料,python本身做为一门解释性语言,说它功能强大,是因为它有着丰富的模块或称之为依赖(包),需要的朋友可以参考下
    2023-10-10
  • 利用Python编写简易的录制屏幕小工具

    利用Python编写简易的录制屏幕小工具

    这篇文章主要为大家详细介绍了如何利用Python语言编写一个简易的录制屏幕小工具,文中的示例代码讲解详细,感兴趣的小伙伴可以动手尝试一下
    2022-08-08

最新评论