Python内置类型性能分析

timeit模块

timeit模块可以用来测试一小段Python代码的执行速度。

Timer是测量小段代码执行速度的类。

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

stmt参数是要测试的代码语句(statment);
setup参数是运行代码时需要的设置;
timer参数是一个定时器函数,与平台有关。
Timer对象.timeit(number=1000000)
Timer类中测试语句执行速度的对象方法。number参数是测试代码时的测试次数,默认为1000000次。方法返回执行代码的平均耗时,一个float类型的秒数。

list的操作测试

# -*- coding:utf-8 -*-

import timeit

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

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

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

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

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

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

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

timer2 = timeit.Timer(stmt="t2()", setup="from __main__ import t2")
print("insert", timer2.timeit(number=1000), "seconds")

timer0 = timeit.Timer(stmt="t0()", setup="from __main__ import t0")
print("extend", timer0.timeit(number=1000), "seconds")

timer1 = timeit.Timer(stmt="t1()", setup="from __main__ import t1")
print("append", timer1.timeit(number=1000), "seconds")

timer3 = timeit.Timer(stmt="t3()", setup="from __main__ import t3")
print("+=", timer3.timeit(number=1000), "seconds")

timer3_1 = timeit.Timer(stmt="t3_1()", setup="from __main__ import t3_1")
print("+加法", timer3_1.timeit(number=1000), "seconds")

timer4 = timeit.Timer(stmt="t4()", setup="from __main__ import t4")
print("[i for i in range()]", timer4.timeit(number=1000), "seconds")

timer5 = timeit.Timer(stmt="t5()", setup="from __main__ import t5")
print("list", timer5.timeit(number=1000), "seconds")
执行结果:

insert 18.678989517 seconds
extend 1.022223395000001 seconds
append 0.6755100029999994 seconds
+= 0.773258104 seconds
+加法 126.929554195 seconds
[i for i in range()] 0.36483252799999377 seconds
list 0.19607099800001038 seconds

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),即一个后面插入和一个前面插入???

list内置操作的时间复杂度

dict内置操作的时间复杂度

原文地址:https://www.cnblogs.com/LiuYanYGZ/p/12232781.html

时间: 2024-10-11 09:22:09

Python内置类型性能分析的相关文章

2.python数据结构的性能分析

2.python数据结构的性能分析 一.引言 现在大家对 大O 算法和不同函数之间的差异有了了解.本节的目标是告诉你 Python 列表和字典操作的 大O 性能.然后我们将做一些基于时间的实验来说明每个数据结构的花销和使用这些数据结构的好处.重要的是了解这些数据结构的效率,因为它们是本博客实现其他数据结构所用到的基础模块.本节中,我们将不会说明为什么是这个性能.在后面的博文中,你将看到列表和字典一些可能的实现,以及性能是如何取决于实现的. 二.列表: python 的设计者在实现列表数据结构的时

常用排序算法的python实现和性能分析

http://www.cnblogs.com/wiki-royzhang/p/3614694.html 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试题整了一下,可以阶段性的留下些脚印——没办法,平时太忙,基本上没有时间写博客.面试测试开发的话,这些也许能帮得上一些. 这篇是关于排序的,把常见的排序算法和面试中经常提到的一些问题整理了一下.这里面大概有3个需要提到的问题: 虽然专业是数

Python——内置类型

Python定义了丰富的数据类型,包括: 数值型:int, float, complex 序列:(iterable) str, unicode, tuple, list, bytearray, buffer, xrange 集合:set, fronzeset 映射:dict 文件:file 布尔值:True.False 和 bool() 函数,其中 bool() 函数将一个值转变成布尔对象 True 或 False . 可调用对象:凡是可以使用 x() 调用 x 的对象 x ,称为可调用的,x

易被忽略的Python内置类型

Python中的内置类型是我们开发中最常见的,很多人都能熟练的使用它们. 然而有一些内置类型确实不那么常见的,或者说往往会被我们忽略,所以这次的主题就是带领大家重新认识这些"不同寻常"的内置类型. (注意:本文基于python3,不会包含任何python2相关内容) frozenset 不可变集合(frozenset)与普通的set一样,只不过它的元素是不可变的,因此诸如add,remove,update等可以添加/删除/改变集合内元素的方法是不存在的,换句话说一旦frozenset建

python内置类型详细解释

文章编写借鉴于内置类型 - Python 3.7.3 文档,主要用于自己学习和记录 python主要内置类型包括数字.序列.映射.类.实例和异常 有些多项集类是可变的.它们用于添加.移除或重排其成员的方法,将原地执行,并不返回特定的项,绝对不会返回多项集实例自身而是返回 None. 实际上所有对象都可以被比较.检测逻辑值,以及转换为字符串(使用 repr() 函数或略有差异的 str() 函数). 后一个函数是在对象由 print() 函数输出时被隐式地调用的. 逻辑值检测 任何对象都可以进行逻

python内置类型---第二天笔记

强类型语言 ***********两个对象的比较******************* 1,值比较,对象中的数据是否相同 == 2,身份比较,两个变量名引用的是否为同一对象 3,类型比较, 例子: *************核心数据类型***************** 数字:int lang float complex bool 字符:str unicode 列表:list 字典:dict 元组:tuple 文件:file 其他类型:集合(set) frozenset 类类型 none 其他文

python内置类型:列表,包括 list 和 tuple

列表list 是一种有序的集合 ,假定list的名字为class list的元素个数:len( class) 访问元素: a. 索引从0开始    b. 也可以使用[-1],[-2],[-3] 从后面访问元素 添加元素 a. append方法  , 该方法是默认添加元素到末尾     class.append('adam') b. insert方法, 该方法能把元素添加到指定的索引位置   class.insert (1,'lily') 删除元素 pop方法 pop( ):括号内为空时,默认删除

Python内置类型——set

Python中, 集合是容器,可以使用len()计算集合中元素的个数, 集合中不存在重复的元素: 集合是可迭代的,但迭代时以任意的顺序进行. non-mutating方法 s.copy() 返回集合s的浅拷贝. s.difference(s1) 返回集合s中不在集合s1中的元素的集合,即s-s1. s.intersection(s1) 返回s与s1的交集.即s&s1. s.issubset(s1) 判断s是不是s1的子集. s.issuperset(s1) 判断s是不是s1的超集. s.symm

【二】python内置类型

1.布尔类型 表示真假的类型(true和false) 数字 0.None,以及元素为空的容器类对象都可视作False,反之为 True. In [1]: bool(0) Out[1]: False In [2]: bool(1) Out[2]: True In [3]: bool(-9) Out[3]: True In [4]: bool(5) Out[4]: True In [5]: bool(None) Out[5]: False In [6]: bool("") Out[6]: