python列表的性能

前言

最近开始学习算法,python书籍为 《python-data-structure-cn》

引自书中:python 的设计者在实现列表数据结构的时候有很多选择。每一个这种选择都可能影响列表操作的性能。为了帮助他们做出正确的选择,他们查看了最常使用列表数据结构的方式,并且优化了实现,以便使得最常见的操作非常快。当然,他们还试图使较不常见的操作快速,但是当需要做出折衷时,较不常见的操作的性能通常牺牲以支持更常见的操作。

常见操作及时间复杂度

python列表的性能_第1张图片

pop() 、pop(i) 、sort()测试

  • pop()随着列表规模变大呈平稳趋势
  • 而pop(0)呈现一元一次线性回归

python列表的性能_第2张图片

 sort()相对于 pop(0)时间消耗大大增加

python列表的性能_第3张图片

总图

python列表的性能_第4张图片

code

# coding:utf-8
import timeit
from timeit import  *
from matplotlib import pyplot
import matplotlib.pyplot as plt


pop_nlogn = []
popzero_nlogn = []
sort_nlogn = []

pop = Timer("test_list.pop()", "from __main__ import test_list")
popzero = Timer("test_list.pop(0)", "from __main__ import test_list")
sort = Timer("test_list.sort()", "from __main__ import test_list")

x = list(range(1000,4000,1000))

for i in x:
    test_list = list(range(i))
    pop_nlogn.append(pop.timeit(number = 100))
    test_list = list(range(i))
    popzero_nlogn.append(popzero.timeit(number = 100))
    test_list = list(range(i))
    sort_nlogn.append(sort.timeit(number = 100))


plt.plot(x, pop_nlogn,marker='o',label='pop_nlogn')
plt.plot(x, popzero_nlogn,marker='o',label='popzero_nlogn')
plt.plot(x, sort_nlogn,marker='o',label='sort_nlogn')

plt.legend()  # 让图例生效

plt.xlabel('n size')  # X轴标签
plt.ylabel("time use")  # Y轴标签


plt.show()

 

 

 

 

你可能感兴趣的:(python算法)