2016-04-30 5 views
0

Ich war in der Lage, 2 verschiedene Möglichkeiten zu finden, eine Zeichenfolge in Python umzukehren. Je häufiger die Codezeilen sind, desto langsamer ist es, also habe ich die folgenden Codezeilen erstellt.Schnellste Möglichkeit, eine Zeichenfolge in Python umzukehren

Code1

"".join(reversed(map(lambda x:x,st))) 

Code2

st[::-1] 

Diese neigen dazu, mir eine ähnliche Leistung zu geben, aber ich denke, 1. eine eine langsame Annäherung sein sollte, wie es 3x mehr Operationen durchführt. Aber selbst für eine 20000 lange Saite bin ich nicht in der Lage, sogar einen Unterschied in einer Performance zu sehen, der auf den ersten Blick nicht klar ist.

+0

Wie haben Sie diese beiden Zeiten? Ich bekomme vernünftige Ergebnisse für eine Zeichenfolge mit 20.000 Zeichen: https://i.imgur.com/DhKaxhR.png – Blender

+2

Jeder Grund, warum Sie nicht verwendet haben: ''' .join (reversed (st))' im ersten Fall? – Cyb3rFly3r

+0

Ich habe time.now() am Anfang des Codes und time.now() am Ende des Benchmarks verwendet. @ Cyb3rFly3r: Es ging nicht darum, mit einem effizienten Algo zu kommen, sondern um zu sehen, welche von diesen beiden wäre schneller Aber yeah ''' .join (umgekehrt (st))' kors meine Meinung –

Antwort

5

Ich sehe einen Unterschied.

Vor allem, was ist los mit map(lambda x: x, st)? Was ist der Zweck?

Verwenden Sie das timeit Modul Code testen:

$ python -m timeit '"".join(reversed("abcdefghijklmnopqrstuvwxyz"))' 
1000000 loops, best of 3: 0.586 usec per loop 
$ python -m timeit '"abcdefghijklmnopqrstuvwxyz"[::-1]'   
10000000 loops, best of 3: 0.0715 usec per loop 

Wie Sie sehen können, die Scheibe ist ~ 8x auf meiner Maschine schneller für diesen speziellen Eingang. Es ist auch prägnanter.

+0

Das ist mehr im Einklang mit meiner Erwartung; In der Python-Community ist bekannt, dass Methode 2 schneller ist als alle anderen, um Strings umzukehren. – Cyb3rFly3r

+0

"" .join ist wirklich ineffizient ... im Gegensatz zu nur umgekehrt, macht dies mehrere Aktionen. –