2016-06-03 6 views
3

Gibt es einen Unterschied in der zeitlichen Komplexität? Oder sind sie gleich? Im mit Mühe zu sagen (Python 3,5)Gibt es einen Unterschied in der Zeitkomplexität zwischen diesen beiden Methoden des List Traversals?

list_of_dict = [{'name':'alan', 'age':5}, {'name':'alice', 'age':6}] 

# first method 
names = [] 
ages = [] 
for i in range(len(list_of_dict)): 
    names.append(list_of_dict[i]['name']) 
    ages.append(list_of_dict[i]['age']) 

# second method 

names = [x['name'] for x in list_of_dict] 
ages = [x['age'] for x in list_of_dict] 

Ich entschuldige mich im Voraus für die möglicherweise trivial Art der Frage. Ich bin ein Student und Ihre Einsicht wird sehr geschätzt, während ich meine Studien fortsetze.

Antwort

5

In Bezug auf asymptotische Zeit Komplexität sind sie gleich.

Beide Methoden erfordern für jedes Element in der Liste einen konstanten Wörterbuchzugriff (im Durchschnitt konstante Zeit), also O(n) für beide.

Wenn Sie jedoch an Konstanten interessiert sind, wird es schwer zu sagen sein, und kann zwischen verschiedenen Dolmetschern variieren, die verschiedene Dinge optimieren könnten.

+0

Wie können Sie sagen, dass sie gleich sind, wenn ich fragen darf? Ich kann den Grund nicht erklären. Aber es scheint, dass der zweite "länger" ist, da er zweimal durch die Liste iteriert – AlanSTACK

+3

@Alan In Bezug auf asymptotische Zeitkomplexität, O (n) = O (2 * n) '. – amit

2

neben theoretischen Komplexität, können Sie diese Zeit, wenn Sie oder ipython verwenden wollen, es zu tun mit %timeit

erste Methode: 10 loops, best of 3: 58.2 ms per loop

zweite Methode: 10 loops, best of 3: 56.3 ms per loop

sie ganz in der Nähe sind, zu sein mit einem größeren Datensatz überprüft.

Verwandte Themen