算法与数据结构学习笔记2--list dict时间复杂度比较

Python数据类型的性能

列表list和字典dict

 List最常用的:按索引取值和赋值

取值:v=a[i]  赋值a[i]=v 时间复杂度都是O(1)

另一个是列表增长

list.append(v)   或者lst = lst+ [v]

 结果是

 list range最快 同时列表推导式也用的很多

list 基本操作的大O数量级

 list.pop  从列表中移除元素

pop() 从列表末尾移除元素,O(1)

 pop(i)从列表中部移除元素,O(n)

pop()的时间不随list大小变化,pop(0)的时间随着list变大而变长

 

dict数据类型

字典与列表不同 根据关键码(key)找到数据项 而列表是根据位置(index)

最常用的取值get和赋值set,其性能为O(1)

 

 线性结构

Linear Structure 

线性结构是一种有序的数据项的集合,其中每个数据项都有前驱和后继

代码

def test1():
    l = []
    for i in range(1000):
        l = l + [i]


def test2():
    l = []
    for i in range(10000):
        l.append(i)


def test3():
    l = [i for i in range(10000)]


def test4():
    l = list(range(10000))


from timeit import Timer
import timeit
t1 = Timer('test1()', 'from __main__ import test1')
t2 = Timer('test2()', 'from __main__ import test2')
t3 = Timer('test3()', 'from __main__ import test3')
t4 = Timer('test4()', 'from __main__ import test4')
print('concat %f seconds\n' % t1.timeit(number= 1000))
print('concat %f seconds\n' % t2.timeit(number= 10000))
print('concat %f seconds\n' % t3.timeit(number= 10000))
print('concat %f seconds\n' % t4.timeit(number= 10000))


popzero = timeit.Timer('x.pop(0)', 'from __main__ import x')
popend = timeit.Timer('x.pop()', 'from __main__ import x')

x = list(range(20000000))
print(popzero.timeit(number=1000))
print(popend.timeit(number=1000))


print('pop(0) pop()')
for i in range(1000000, 100000001, 1000000):
    x = list(range(i))
    pt = popend.timeit(number=10)
    x = list(range(i))
    pz = popzero.timeit(number=10)
    print('%15.5f, %15.5f' %(pz, pt))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lyttonkeepgoing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值