设计一个实验来比较 del 运算符在列表和字典上的性能
Devise an experiment that compares the performance of the del operator on lists and dictionaries
我目前正在做 Problem Solving with Algorithms and Data Structures
所以我在这里进行第 3 个问题的编程练习,因为它说设计一个实验来比较 del 运算符在列表和字典上的性能。
这是我的解决方案:
3) Devise an experiment that compares the performance of the del
operator on lists and dictionaries.
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'})
所以根据大O记法列表输出时间应该和字典输出时间不同
要检查函数的执行时间,建议使用 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
所以很明显del
对dic的操作比list
快
请查看有关测量 time taken by a function
的关于 SO 的问答
下面是我是如何实现的。结果显示字典上的 del 操作比列表中的更快。
代码是不言自明的。
import timeit
import random
def del_dict_items(x):
# Insert the index
random_index = random.randrange(len(x) - 1)
try:
del x[random_index]
except KeyError:
x.setdefault(random_index, None)
del x[random_index]
print("i\t\tlist_del_time\t\tdict_del_time")
for i in range(10000, 100001, 1000):
t_list = timeit.Timer("del x[random.randrange(len(x)-1)]", "from __main__ import random, x")
t_dict = timeit.Timer("del_dict_items(x)", "from __main__ import random, x, del_dict_items")
x = list(range(i))
list_del_time = t_list.timeit(number=1000)
x = {j:None for j in range(i)}
dict_del_time = t_dict.timeit(number=1000)
print("%d %10.3f %20.3f" %(i, list_del_time, dict_del_time))
我目前正在做 Problem Solving with Algorithms and Data Structures
所以我在这里进行第 3 个问题的编程练习,因为它说设计一个实验来比较 del 运算符在列表和字典上的性能。
这是我的解决方案:
3) Devise an experiment that compares the performance of the
del
operator on lists and dictionaries.
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'})
所以根据大O记法列表输出时间应该和字典输出时间不同
要检查函数的执行时间,建议使用 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
所以很明显del
对dic的操作比list
请查看有关测量 time taken by a function
的关于 SO 的问答下面是我是如何实现的。结果显示字典上的 del 操作比列表中的更快。 代码是不言自明的。
import timeit
import random
def del_dict_items(x):
# Insert the index
random_index = random.randrange(len(x) - 1)
try:
del x[random_index]
except KeyError:
x.setdefault(random_index, None)
del x[random_index]
print("i\t\tlist_del_time\t\tdict_del_time")
for i in range(10000, 100001, 1000):
t_list = timeit.Timer("del x[random.randrange(len(x)-1)]", "from __main__ import random, x")
t_dict = timeit.Timer("del_dict_items(x)", "from __main__ import random, x, del_dict_items")
x = list(range(i))
list_del_time = t_list.timeit(number=1000)
x = {j:None for j in range(i)}
dict_del_time = t_dict.timeit(number=1000)
print("%d %10.3f %20.3f" %(i, list_del_time, dict_del_time))