1659 Stimmen

Umkehrung einer Zeichenkette in Python

Es gibt keinen eingebauten reverse Funktion für Pythons str Objekt. Wie lässt sich diese Methode am besten implementieren?

Wenn Sie eine sehr knappe Antwort geben, erläutern Sie bitte deren Effizienz. Zum Beispiel, ob die str Objekt in ein anderes Objekt umgewandelt wird, usw.

0 Stimmen

0 Stimmen

@Ender das Duplikat sollte auf die andere Frage sein, da diese schon älter ist.

0 Stimmen

"das Duplikat sollte auf der anderen Frage stehen, da diese einmal älter ist" Es funktioniert auf Stack Overflow eigentlich nicht so . Wir nutzen den Vorteil der Rückschau, um das zu wählen, was wir für das Beste halten. beste Version der Frage. Abgesehen davon funktionieren viele Techniken sowohl für eine Zeichenkette als auch für eine Liste, andere wiederum nicht, und es gibt auch keine klare Präferenz für die eine Frage gegenüber der anderen. Daher denke ich nicht, dass eine der beiden Fragen als Duplikat gekennzeichnet werden sollte.

15voto

Harry Punkte 513

1. Verwendung der Slice-Notation

def rev_string(s): 
    return s[::-1]

2. Verwendung der Funktion reversed()

def rev_string(s): 
    return ''.join(reversed(s))

3. Verwendung der Rekursion

def rev_string(s): 
    if len(s) == 1:
        return s

    return s[-1] + rev_string(s[:-1])

3 Stimmen

Achten Sie auf die Rekursion Lösung, wenn die Zeichenfolge ist anständig Länge laufen Sie in RecursionError: maximum recursion depth exceeded while calling a Python object . Ex: rev_string("abcdef"*1000)

13voto

pX0r Punkte 1244

Eine weniger verwirrende Sichtweise wäre die folgende:

string = 'happy'
print(string)

glücklich

string_reversed = string[-1::-1]
print(string_reversed)

'yppah'

Auf Englisch lautet [-1::-1] wie folgt:

"Beginnen Sie bei -1 und gehen Sie den ganzen Weg in Schritten von -1".

2 Stimmen

En -1 ist jedoch nach wie vor überflüssig.

2 Stimmen

@EricDuminil wenn Sie verstehen wollen, ist es meiner Meinung nach notwendig

10voto

akshaynagpal Punkte 2517

Eine Zeichenkette in Python umkehren, ohne reversed() oder [::-1] zu verwenden

def reverse(test):
    n = len(test)
    x=""
    for i in range(n-1,-1,-1):
        x += test[i]
    return x

1 Stimmen

Sollten Sie nicht xrange verwenden, da Sie die Liste nicht benötigen, in Python 2?

5voto

gxpr Punkte 728

Auch das ist ein interessanter Weg:

def reverse_words_1(s):
    rev = ''
    for i in range(len(s)):
        j = ~i  # equivalent to j = -(i + 1)
        rev += s[j]
    return rev

oder ähnlich:

def reverse_words_2(s):
    rev = ''
    for i in reversed(range(len(s)):
        rev += s[i]
    return rev

Eine andere, "exotischere" Möglichkeit ist die Verwendung von Bytearray, das .reverse() unterstützt

b = bytearray('Reverse this!', 'UTF-8')
b.reverse()
b.decode('UTF-8')`

hervorbringen wird:

'!siht esreveR'

4voto

Javier Punkte 674
def reverse(input):
    return reduce(lambda x,y : y+x, input)

3 Stimmen

Ich habe auf "Upvote" geklickt, weil ich diesen Lambda-Ausdruck mag. Leider ist es die am wenigsten effiziente Lösung von allen oben aufgeführten (test: Gist palindrome.py )

1 Stimmen

Dies ist eine schreckliche Lösung, die unnötig ineffizient ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X