zoukankan      html  css  js  c++  java
  • 2 timeit模块,python中数据结构

    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)的含义是指一个数学模型以及定义在此数学模型上的一组操作。即把数据类型和数据类型上的运算捆在一起,进行封装。

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

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

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

     

  • 相关阅读:
    uva 11997
    【USACO 3.1.1】最短网络
    【USACO 2.4.5】分数化小数
    【USACO 2.4.4】回家
    【USACO 2.4.3】牛的旅行
    【USACO 2.4.2】穿越栅栏
    【USACO 2.4.1】两只塔姆沃斯牛
    【USACO 2.3.5】控制公司
    【USACO 2.3.4】货币系统
    【USACO 2.3.3】零数列
  • 原文地址:https://www.cnblogs.com/venicid/p/9383934.html
Copyright © 2011-2022 走看看