2016-04-06 8 views
0

ich zur Zeit Problem Solving with Algorithms and Data StructuresEntwickeln Sie ein Experiment, das die Leistung des del Operator auf Listen und Wörterbücher vergleicht

Also hier mache ich auf Programmierung Übung am 3. Frage, sagt es ein Experiment entwickeln, die die Leistung vergleicht der der Del-Operator auf Listen und Wörterbüchern. Hier

ist die Lösung von meiner Seite:

3) Entwickeln Sie ein Experiment, das die Leistung des del Operator auf Listen und Wörterbücher vergleicht.

1) Listen:

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) Wörterbuch

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"})) 

Ausgang:

(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'}) 

So nach Big O-Notation Liste Ausgabezeit sollte von Wörterbuch unterschiedlich sein Ausgabezeit

Referenz: Time Complexity

+0

Sie tun nicht wirklich die Löschung. Sie tun 'result = n' anstelle von' result = dictionary (n) 'oder' result = listitems (n) '. Der Ort, an dem Sie momentan 'listitems' und' dictionary' haben, bewirkt, dass sie ausgewertet werden, bevor 'time_taken' ausgeführt wird. –

Antwort

0

die Ausführungszeit einer Funktion Um zu überprüfen, ist es ratsam, timeit

Das Problem in Sie sind Verfahren zu verwenden ist, wenn Sie anrufen time_taken(listitems(values)) Sie tatsächlich listitems Funktion zuerst vorbei ausgeführt werden dann die Wert time_taken so was time_taken tut, ist es zeigt die Zeit, um die gegebene Variable in result speichern genommen, so dass Sie gleichzeitig

mit timeit Modul bekommen:

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 

So ist es klar, dass del Betrieb auf dic als Liste schneller ist

Do dieses Q Blick in & A auf SO über time taken by a function

+0

Hmm es funktioniert, aber können Sie mir Schritt für Schritt beibringen, wie diese Zeit funktioniert und warum Sie del intime Zeit verwendet haben und was ist diese Variable? Ich bin verwirrt. Bitte helfen Sie mir dabei. –

+0

@PradeepSukhwani Ich habe auf die offizielle 'time'-Seite hingewiesen. Ich denke, die Seite würde diese Frage beantworten. Wenn Sie immer noch verwirrt sind, lassen Sie es mich wissen :). – The6thSense

0

Unten Messung ist, wie ich die Umsetzung tat. Die Ergebnisse zeigen, dass die Del-Operation in Wörterbüchern schneller ist als in Listen. Der Code ist ziemlich selbsterklärend.

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)) 
Verwandte Themen