码迷,mamicode.com
首页 > 编程语言 > 详细

2 timeit模块,python中数据结构

时间:2018-07-29 00:50:32      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:code   扩展   atm   运算   模块   删除   info   使用   adt   

1、timeit模块:代码事件测量模块

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类型的秒数。

 

 

 

2、python列表操作的事件效率

(1)list生成方式比较

技术分享图片

def t1():
    li = []
    for i in range(10000):
        li.append(i)

def t2():
    li = []
    for i in range(10000):
        li = li + [i]
        # li += [i]

def t3():
    li = [i for i in range(10000)]

def t4():
    li = list(range(10000))


def t5():
    li = []
    for i in range(10000):
        li.extend([i])


from timeit import Timer

timer1 = Timer("t1()", "from __main__ import t1")
        # "t1()"  要检测的函数(str),
        # "from __main__ import t1" 从哪个文件导入

print("append-->", timer1.timeit(1000))
        # number参数是测试代码时的测试次数

timer2 = Timer("t2()", "from __main__ import t2")
print("+ -->", timer1.timeit(1000))

timer3 = Timer("t3()", "from __main__ import t3")
print("[i for i in range(10000)]-->", timer1.timeit(1000))

timer4 = Timer("t4()", "from __main__ import t4")
print("list(range(10000))-->", timer1.timeit(1000))

timer5 = Timer("t5()", "from __main__ import t5")
print("list(extend(10000))-->", timer1.timeit(1000))

 技术分享图片技术分享图片

技术分享图片

(2)pop操作测试

x = range(2000000)
pop_zero = Timer("x.pop(0)","from __main__ import x")
print("pop_zero ",pop_zero.timeit(number=1000), "seconds")
x = range(2000000)
pop_end = Timer("x.pop()","from __main__ import x")
print("pop_end ",pop_end.timeit(number=1000), "seconds")

# (‘pop_zero ‘, 1.9101738929748535, ‘seconds‘)
# (‘pop_end ‘, 0.00023603439331054688, ‘seconds‘)

 

 

测试pop操作:从结果可以看出,pop最后一个元素的效率远远高于pop第一个元素

可以自行尝试下list的append(value)和insert(0,value),即一个后面插入和一个前面插入???

 

3、list与dict的时间复杂度

技术分享图片技术分享图片

 技术分享图片技术分享图片

技术分享图片技术分享图片技术分享图片

 

4、引入数据结构

我们如何用Python中的类型来保存一个班的学生信息? 如果想要快速的通过学生姓名获取其信息呢?

技术分享图片技术分享图片技术分享图片

列表和字典都可以存储一个班的学生信息,但是想要在列表中获取一名同学的信息时,就要遍历这个列表,其时间复杂度为O(n),

而使用字典存储时,可将学生姓名作为字典的键,学生信息作为值,进而查询时不需要遍历便可快速获取到学生信息,其时间复杂度为O(1)。

 技术分享图片技术分享图片

这样的数据组织方式,我们就把他叫做数据结构 

组织方式不同,数据结构不同

数据结构解决的一组数据如何保存,它的保存形式是什么样式

 技术分享图片

在上面的问题中我们可以选择Python中的列表或字典来存储学生信息。列表和字典就是Python内建帮我们封装好的两种数据结构。

 

5、数据结构概念

数据是一个抽象的概念,将其进行分类后得到程序设计语言中的基本类型。如:int,float,char等。数据元素之间不是独立的,存在特定的关系,这些关系便是结构。

数据结构指数据对象中数据元素之间的关系。

Python给我们提供了很多现成的数据结构类型,这些系统自己定义好的,不需要我们自己去定义的数据结构叫做Python的内置数据结构,比如列表、元组、字典。

而有些数据组织方式,Python系统里面没有直接定义,需要我们自己去定义实现这些数据的组织方式,这些数据组织方式称之为Python的扩展数据结构,比如栈,队列等。

 

 

6、算法与数据结构的区别

数据结构只是静态的描述了数据元素之间的关系。

高效的程序需要在数据结构的基础上设计和选择算法。

程序 = 数据结构 + 算法

总结:算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题载体

  

7、抽象数据类型(Abstract Data Type)

抽象数据类型(ADT)的含义是指一个数学模型以及定义在此数学模型上的一组操作。即把数据类型和数据类型上的运算捆在一起,进行封装。

引入抽象数据类型的目的是把数据类型的表示和数据类型上运算的实现与这些数据类型和运算在程序中的引用隔开,使它们相互独立。

最常用的数据运算有五种:

  • 插入
  • 删除
  • 修改
  • 查找
  • 排序

 技术分享图片

 

2 timeit模块,python中数据结构

标签:code   扩展   atm   运算   模块   删除   info   使用   adt   

原文地址:https://www.cnblogs.com/venicid/p/9383934.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!