数据结构与算法(python描述)(三)—— 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不同list类型操作效率

from timeit import Timer

li1 = [1, 2]
li2 = [23, 5]
# 创建列表的四种方式
l = li1 + li2  # 列表相加
l = []  # 空列表追加
l = [i for i in range(10000)]  # 向列表中放入range
l = list(range(10000))  # 转换成列表


def testList1():
    list1 = []
    for i in range(10000):
        list1 += [i]


def testList2():
    list2 = []
    for i in range(10000):
        list2.append(i)


def testList3():
    list3 = [i for i in range(10000)]


def testList4():
    list4 = list(range(10000))

def testList5():
    list5 = []
    for i in range(10000):
        list5.insert(0,i)




print("测试运行时间比较:")
timer1 = Timer("testList1()", "from __main__ import testList1")
print("+:", timer1.timeit(1000))  # 0.844717138
timer2 = Timer("testList2()", "from __main__ import testList2")
print("append:", timer2.timeit(1000))  # 0.7383539509999999
timer3 = Timer("testList3()", "from __main__ import testList3")
print("for range:", timer3.timeit(1000))  # 0.34893865300000004
timer4 = Timer("testList4()", "from __main__ import testList4")
print("list range:", timer4.timeit(1000))  # 0.17512708700000013
timer5 = Timer("testList5()", "from __main__ import testList5")
print("insert:", timer5.timeit(1000))  # 31.671403257

可以看出从上往下依次效率越来越高。insert则速度最慢,他是往列表头添加,这个和他的数据结构有关,因为List是python封装好的数据结构,所以往头部添加和往尾部添加有显著的效率差异。我们后面会详细分析。

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')

这里可以发现,弹出尾部比弹出首部效率要高很多。这也是因为数据结构的问题。
在这里插入图片描述
在这里插入图片描述

发布了103 篇原创文章 · 获赞 94 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/chongbin007/article/details/94639593
今日推荐