Stelle von der Maximalwert aus einer Liste.Achtung ANFÄNGER!

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.
Antworten
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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? :twisted:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

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? :twisted:
Ich habe wie du `time` dreimal je Skript ausgeführt und die Werte rausgesucht. :P Und der Overhead ist mir eigentlich egal, der sollte ja eigentlich immer genauso lange brauchen.
Benutzeravatar
/me
User
Beiträge: 3554
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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
Antworten