2 timeit模块,python中数据结构

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

 

 

 

二、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第一个元素python

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

 

三、list与dict的时间复杂度

 

 

四、引入数据结构

咱们如何用Python中的类型来保存一个班的学生信息? 若是想要快速的经过学生姓名获取其信息呢?数据结构

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

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

 

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

组织方式不一样,数据结构不一样

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

 

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

 

五、数据结构概念

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

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

Python给咱们提供了不少现成的数据结构类型,这些系统本身定义好的,不须要咱们本身去定义的数据结构叫作Python的内置数据结构,好比列表、元组、字典。3d

而有些数据组织方式,Python系统里面没有直接定义,须要咱们本身去定义实现这些数据的组织方式,这些数据组织方式称之为Python的扩展数据结构,好比栈,队列等。code

 

 

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

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

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

程序 = 数据结构 + 算法

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

  

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

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

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

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

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

 

相关文章
相关标签/搜索