Was ist der beste Weg, um einen Python-String rückwärts zu durchlaufen?
Folgendes scheint ein wenig umständlich, wenn -1 Offset benötigt wird:
string = "trick or treat"
for i in range(len(string)-1, 0-1, -1):
print string[i]
Das folgende scheint prägnanter, aber erzeugt es tatsächlich eine umgekehrte Zeichenfolge, so dass es zu einer geringfügigen Leistungsstrafe kommt?
string = "trick or treat"
for c in string[::-1]:
print c
Versuchen Sie das - umgekehrte eingebaute:
for c in reversed(string):
print c
Der Aufruf reversed () macht einen Iterator, anstatt den gesamten String zu kopieren.
PEP 322 erläutert die Motivation für reversed () und seine Vorteile gegenüber anderen Ansätzen.
So können Sie eine Zeichenfolge umkehren, ohne die integrierten Funktionen wie reversed
zu verwenden. Negative Schrittwerte fahren rückwärts.
def reverse(text):
rev = ''
for i in range(len(text), 0, -1):
rev += text[i-1]
return rev
Ja, die zweite Syntaxverknüpfung erstellt eine Zwischenzeichenfolge und ist mit einem Leistungsnachteil verbunden.
Die erste Version ist besser geschrieben als:
for index, char in enumerate(reversed(s)):
print "pos %d: %s" % (index, char)
Was leicht zu verstehen ist. Weder reversed
noch enumerate
`müssen eine Kopie der Zeichenfolge erstellen.
Seien Sie auch vorsichtig bei der Verwendung von string
als Variablenname, da dies auch der Name von einem Modul in der Standardbibliothek ist.
string = "trick or treat"
for c in string[::-1]:
print c
Ich würde das benutzen. Es ist wahrscheinlich ziemlich schnell, obwohl es vielleicht einen etwas besseren Weg gibt (aber ich bezweifle es).
EDIT: Eigentlich ist reversed
bei einem zweiten Test mit einem Programm, das ich zusammen gehackt habe, wahrscheinlich der richtige Weg.
==== Results ====
Sample 1: 0.0225071907043 # Using a for loop
Sample 2: 0.0100858211517 # Using reversed
Weniger Code ist in Python normalerweise schneller. Zum Glück müssen Sie nicht raten:
python -mtimeit -s"s='x'*100000" "for x in s[::-1]: pass"
100 loops, best of 3: 1.99 msec per loop
python -mtimeit -s"s='x'*100000" "for x in reversed(s): pass"
1000 loops, best of 3: 1.97 msec per loop
python -mtimeit -s"s='x'*100000" "for i in xrange(len(s)-1, 0-1, -1): s[i]"
100 loops, best of 3: 4.95 msec per loop
Der kürzere Code ist also etwas schneller, hat jedoch einen zusätzlichen Speicherplatz.
reversed
nimmt eine Iteration und gibt einen Iterator zurück, der sich rückwärts bewegt. string[::-1]
ist in Ordnung, erstellt jedoch stattdessen eine neue, umgekehrte Zeichenfolge. Wenn Sie nur iterieren möchten, ist dies wahrscheinlich besser:
for c in reversed(string):
print c
Wenn Sie die umgekehrte Zeichenfolge anschließend verwenden möchten, ist es besser, sie einmal zu erstellen.
string = "trick or treat"
for c in reversed(string):
print c
Werde tun was ich denke du willst Es verwendet einen Iterator. Dies sollte mit allem funktionieren, das __reveresed__ () oder __len__ () und __getitem__ () implementiert hat. __getitem __ () müsste int-Argumente ab 0 annehmen.
def reverse(text):
x = ""
for i in range(len(text)):
x = x + text[len(text)-i-1]
return x
Umkehren eines Strings in Python mit For Loop
outputStr = ''
a = raw_input("Enter String: ")
for i in range(len(a), 0, -1):
outputStr += a[i-1]
print outputStr
Python 3 mit den Methoden enumerate
und reversed
:
string = "trick or treat"
for i, c in enumerate(reversed(string)):
print(i, c)
Sie können print (c) nur zum Abrufen jedes Zeichens ohne Index verwenden.