Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Hyperion
Moderator
Beiträge: 7478 Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:
Samstag 28. Januar 2012, 22:21
nomnom hat geschrieben: Also mal mit einem gescheiten Werkzeug gemessen (time):
Als ein gescheites Werkzeug wäre hier eher das `timeit`-Modul!
Code: Alles auswählen
nelson@destiny ~/src/Python/snippets % python -m timeit -s "VALUES = range(100)" -- "VALUES.index(max(VALUES))"
100000 loops, best of 3: 10.5 usec per loop
nelson@destiny ~/src/Python/snippets % python -m timeit -s "from operator import itemgetter; VALUES = range(100)" -- "max(enumerate(VALUES), key=itemgetter(1))[0]"
10000 loops, best of 3: 38.7 usec per loop
Ich gebe zu, das überrascht mich jetzt...
nomnom
User
Beiträge: 487 Registriert: Mittwoch 19. Mai 2010, 16:25
Samstag 28. Januar 2012, 22:36
Hyperion hat geschrieben: nomnom hat geschrieben: Also mal mit einem gescheiten Werkzeug gemessen (time):
Als ein gescheites Werkzeug wäre hier eher das `timeit`-Modul!
Hm, `timeit` rühre ich nicht mehr an, weil ich nicht verstehe warum das immer so absurde Zeiten misst.
Hyperion
Moderator
Beiträge: 7478 Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:
Samstag 28. Januar 2012, 22:37
nomnom hat geschrieben: Hm, `timeit` rühre ich nicht mehr an, weil ich nicht verstehe warum das immer so absurde Zeiten misst.
Und stattdessen ist Dir das "Einmalausführen" inkl. Overhead lieber und verlässlicher?
nomnom
User
Beiträge: 487 Registriert: Mittwoch 19. Mai 2010, 16:25
Samstag 28. Januar 2012, 22:41
Hyperion hat geschrieben: nomnom hat geschrieben: Hm, `timeit` rühre ich nicht mehr an, weil ich nicht verstehe warum das immer so absurde Zeiten misst.
Und stattdessen ist Dir das "Einmalausführen" inkl. Overhead lieber und verlässlicher?
Ich habe wie du `time` dreimal je Skript ausgeführt und die Werte rausgesucht.
Und der Overhead ist mir eigentlich egal, der sollte ja eigentlich immer genauso lange brauchen.
/me
User
Beiträge: 3554 Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn
Samstag 28. Januar 2012, 22:42
Hyperion hat geschrieben: Ich gebe zu, das überrascht mich jetzt...
Mich nicht.
Code: Alles auswählen
def search_1():
return VALUES.index(max(VALUES))
def search_2():
return max(enumerate(VALUES), key=itemgetter(1))[0]
pprint(dis.dis(search_1))
pprint(dis.dis(search_2))
Code: Alles auswählen
14 0 LOAD_GLOBAL 0 (VALUES)
3 LOAD_ATTR 1 (index)
6 LOAD_GLOBAL 2 (max)
9 LOAD_GLOBAL 0 (VALUES)
12 CALL_FUNCTION 1
15 CALL_FUNCTION 1
18 RETURN_VALUE
17 0 LOAD_GLOBAL 0 (max)
3 LOAD_GLOBAL 1 (enumerate)
6 LOAD_GLOBAL 2 (VALUES)
9 CALL_FUNCTION 1
12 LOAD_CONST 1 ('key')
15 LOAD_GLOBAL 3 (itemgetter)
18 LOAD_CONST 2 (1)
21 CALL_FUNCTION 1
24 CALL_FUNCTION 257
27 LOAD_CONST 3 (0)
30 BINARY_SUBSCR
31 RETURN_VALUE