数据结构和算法(代码执行时间测量模块timeit)

2024-02-23 13:32

本文主要是介绍数据结构和算法(代码执行时间测量模块timeit),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

考察python的执行效率,python在调用函数的时候,要考察其函数内部算法的效率,本文将利用python中timeit模块来测试一小段python代码的执行速度。

class timeit.Timer(stmt=‘pass’, setup=‘pass’, timer=timer function)

Timer是测量小段代码执行速度的类
stmt参数是要测试的代码语句(statment)
setup参数是运行代码时需要的设置
timer参数是一个定时器函数,与平台有关

timeit.Timer.timeit(number=1000000)

Timer类中测试语句执行速度的对象方法,number参数是测试代码时的测试次数,默认为1000000,方法返回执行代码的平均耗时,一个float类型的秒数。

python列表类型不同操作的时间效率

python生成列表的常见形式有一下四种:

  1. 两个列表的相加
  2. 列表生成器
  3. 可迭代对象转化为列表
  4. 对空列表进行元素追加

对于以上四种形式,自定义四种函数实现

#对空列表进行元素追加
def test1():li = []for i in range(10000):li.append(i)
def test2():li = []for i in range(10000):li =li + [i]
def test3():li = [i for i in range(10000)]
def test4():li = list(range(10000))def test5():li = []for i in range(10000):li.extend([i])    
from timeit import Timertimer1 = Timer('test1()','from __main__ import test1')
print("append追加:",timer1.timeit(1000))timer2 = Timer('test2()','from __main__ import test2')
print("求和:",timer2.timeit(1000))timer3 = Timer('test3()','from __main__ import test3')
print("列表生成器:",timer3.timeit(1000))timer4 = Timer('test4()','from __main__ import test4')
print("可迭代对象转化:",timer4.timeit(1000))timer5 = Timer('test5()','from __main__ import test5')
print("extend:",timer5.timeit(1000))
结果

append追加: 0.6496986700076377
求和: 0.7470834940031637
列表生成器: 0.30637266401026864
可迭代对象转化: 0.14538886799709871
extend: 0.9688844589982182

元素追加(append和insert)
def t6():li = []for i in range(10000):li.append(i) #尾部添加def t7():li = []for i in range(10000):li.insert(0,i)#头部添加 
timer6 = Timer('t6()','from __main__ import t6')
print("append:",timer6.timeit(1000))timer7 = Timer('t7()','from __main__ import t7')
print("insert:",timer7.timeit(1000))
结果

append: 0.6802220060053514
insert: 28.873230566998245

结果来看尾部添加的效率明显优于头部添加,这与python的列表数据存储方式决定的,后续写数据结构时将对此进行解答

同理,pop删除元素方式,从队头删除的效率要远远低于从队尾删除元素的效率。

list内置函数的时间复杂度

OperationBig-O Efficiency
index x[]O(1)
index assignmentO(1)
append()O(1)
pop()O(1)
pop(i)O(n)
insertO(n)
del operatorO(n)
iterationO(n)
contains(in)O(n)
get slice[x:y]O(k)
del sliceO(n)
set sliceO(n+k)
reverseO(n)
concatenameO(k)
sortO(nlogn)
multiplyO(nk)

dict内置函数的时间复杂度

OperationBig-O Efficiency
copyO(n)
get itemO(1)
set itemO(1)
delete itemO(1)
iterationO(n)
contains(in)O(1)

这篇关于数据结构和算法(代码执行时间测量模块timeit)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/738802

相关文章

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

利用Python实现时间序列动量策略

《利用Python实现时间序列动量策略》时间序列动量策略作为量化交易领域中最为持久且被深入研究的策略类型之一,其核心理念相对简明:对于显示上升趋势的资产建立多头头寸,对于呈现下降趋势的资产建立空头头寸... 目录引言传统策略面临的风险管理挑战波动率调整机制:实现风险标准化策略实施的技术细节波动率调整的战略价

Python logging模块使用示例详解

《Pythonlogging模块使用示例详解》Python的logging模块是一个灵活且强大的日志记录工具,广泛应用于应用程序的调试、运行监控和问题排查,下面给大家介绍Pythonlogging模... 目录一、为什么使用 logging 模块?二、核心组件三、日志级别四、基本使用步骤五、快速配置(bas

Python日期和时间完全指南与实战

《Python日期和时间完全指南与实战》在软件开发领域,‌日期时间处理‌是贯穿系统设计全生命周期的重要基础能力,本文将深入解析Python日期时间的‌七大核心模块‌,通过‌企业级代码案例‌揭示最佳实践... 目录一、背景与核心价值二、核心模块详解与实战2.1 datetime模块四剑客2.2 时区处理黄金法

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

macOS Sequoia 15.5 发布: 改进邮件和屏幕使用时间功能

《macOSSequoia15.5发布:改进邮件和屏幕使用时间功能》经过常规Beta测试后,新的macOSSequoia15.5现已公开发布,但重要的新功能将被保留到WWDC和... MACOS Sequoia 15.5 正式发布!本次更新为 Mac 用户带来了一系列功能强化、错误修复和安全性提升,进一步增

Pandas进行周期与时间戳转换的方法

《Pandas进行周期与时间戳转换的方法》本教程将深入讲解如何在pandas中使用to_period()和to_timestamp()方法,完成时间戳与周期之间的转换,并结合实际应用场景展示这些方法的... 目录to_period() 时间戳转周期基本操作应用示例to_timestamp() 周期转时间戳基

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ