Python列表和集合的效率对比

域名2025-11-04 07:46:22376

程序运行效率

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

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

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

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

https://wiki.python.org/moin/TimeComplexity

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

数据查找效率

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

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

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

本文地址:http://www.bhae.cn/html/108d28199610.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

全站热门

深入了解u深度制作教程(从入门到精通,助你成为AI大师)

使用U盘重新安装Win7系统教程(详细步骤和注意事项)

联想官网系统安装教程(一步步教你如何正确安装联想官网系统)

老毛桃重装系统教程视屏(老毛桃重装系统教程视屏,让你轻松掌握重装系统的技巧和步骤)

页面设置方法与文章布局技巧(提高文章可读性的关键步骤和注意事项)

用U盘制作系统盘教程(轻松学会制作U盘系统盘,助力系统安装与恢复)

商派云起怎么样?——一款强大的商务云平台(商派云起功能全面,为企业发展助力)

联想Miix300一10(探索Miix300一10的功能和优势,提升移动工作效率)

友情链接

滇ICP备2023000592号-9