设计一个实验,比较列表和字典上的del运算符的性能

时间:2016-04-06 07:21:37

标签: python list dictionary big-o python-interactive

我目前正在做Problem Solving with Algorithms and Data Structures

所以我在第三个问题上进行编程练习,因为它描述了一个比较列表和词典上del运算符性能的实验。

以下是我方的解决方案:

  

3)设计一个实验,比较列表和词典上del运算符的性能。

1)列出:

def listitems(lis):

    del(lis[16])
    return lis

def time_taken(n):

    start_time = time.time()
    result = n
    end_time = time.time()
    return end_time - start_time, result

print time_taken(listitems([1,2,3,5,4,5,6,5,4,8,5,2,4,5,2,6,3,5,12,4,2,5,2,4,[1,5,4,5,4,54,5,5,6,4,5,[2,4,5,5,1,2,5]]]))

2)字典

def dictionary(dic):

    del(dic["Topic"])
return dic

def time_taken(n):

    start_time = time.time()
    result = n
    end_time = time.time()
    return end_time - start_time, result

print time_taken(dictionary({"Name": "Pradeep", "Age": 23, "Learning": "Python", "Topic": "Big O Notation"}))

输出:

(0.0, [1, 2, 3, 5, 4, 5, 6, 5, 4, 8, 5, 2, 4, 5, 2, 6, 5, 12, 4, 2, 5, 2, 4, [1, 5, 4, 5, 4, 54, 5, 5, 6, 4, 5, [2, 4, 5, 5, 1, 2, 5]]])

(0.0, {'Age': 23, 'Name': 'Pradeep', 'Learning': 'Python'})

因此根据Big O表示法列表输出时间应与字典输出时间不同

参考:Time Complexity

2 个答案:

答案 0 :(得分:0)

要检查功能的执行时间,建议使用timeit

您的方法中的问题是,当您致电time_taken(listitems(values))时,您实际上是先执行listitems函数,然后将值传递给time_taken,那么time_taken做什么它是否显示在result中存储给定变量所花费的时间,以便获得相同的时间

使用timeit模块:

timeit.timeit('lis = [1,2,3,5,4,5,6,5,4,8,5,2,4,5,2,6,3,5,12,4,2,5,2,4,[1,5,4,5,4,54,5,5,6,4,5,[2,4,5,5,1,2,5]]]; del(lis[16])', number=10000)
Out[41]: 0.0182793565268895

timeit.timeit('dic = {"Name": "Pradeep", "Age": 23, "Learning": "Python", "Topic": "Big O Notation"}; del(dic["Topic"])', number=10000)
Out[42]: 0.006386155956171535

因此很清楚,对{2}的del操作比列表

更快

关于衡量time taken by a function

,请查看关于SO的问答

答案 1 :(得分:0)

以下是我执行的方式。结果显示字典上的del操作比列表中的更快。 代码非常明显。

{{1}}