it-swarm.com.de

Die beste Möglichkeit, einen Python-String rückwärts zu durchlaufen

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
33
clwen

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.

65

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
5
Nathan

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.

4
Triptych
 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
3
AJ00200

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.

3
Jochen Ritzel

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.

2
Cat Plus Plus
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.

2
krousey
def reverse(text):
    x = ""
    for i in range(len(text)):
        x = x + text[len(text)-i-1]
    return x
1
praveen

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
1
Akshay Malhotra

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.

0
ian0411